Имена столбцов EF Core Dynamic в подобных условияхC#

Место общения программистов C#
Ответить
Anonymous
 Имена столбцов EF Core Dynamic в подобных условиях

Сообщение Anonymous »

Я создал общий метод для серверной части данных jquery в ядре asp.net 8, он работает, но я хочу преобразовать его в стиль EF quirybuilder вместо пользовательских запросов sql
Я пробовал много, но сталкиваюсь с проблемой получения динамических имен полей в тех условиях, в которых
текущий рабочий код

Код: Выделить всё

public async Taskgetdata()
{
var queryString = Request.QueryString.ToString();
IDictionary qs = QueryHelpers.ParseQuery(queryString);
var entityType = _context.Model.FindEntityType(typeof(Gate));
//var entityType = typeof(DTGate);
var cols = entityType.GetProperties().Select(p => p.Name).ToArray();

string qry = "select * from " + entityType.GetTableName() + " where 1=1 ";

string mainConds = " and created_by="+User.Identity.UserId();

//ordering
string orderBy = "";
if (qs.ContainsKey("iSortingCols") && !string.IsNullOrEmpty(qs["iSortingCols"]))
{
var numOfSortCols = Convert.ToInt32(qs["iSortingCols"]);
List dtOrders = new List();
for (int i = 0; i < numOfSortCols; i++)
{
dtOrders.Add(qs["mDataProp_" + Convert.ToInt32(qs["iSortCol_" + i])] + " " + qs["sSortDir_" + i]);
}
if (dtOrders.Count > 0)
{
orderBy = " ORDER BY " + string.Join(",", dtOrders);
}
}

//main filter
List filterCondsList = new List();
if (qs.ContainsKey("sSearch") && !string.IsNullOrEmpty(qs["sSearch"]))
{
var searchTerm = qs["sSearch"];
foreach (var col in cols)
{
string thisCond = " " + col + " LIKE '%" + searchTerm + "%'";
filterCondsList.Add(thisCond);
}
}
string filterConds = "";
if (filterCondsList.Count > 0)
{
filterConds = "(" + string.Join(" OR ", filterCondsList) + ")";
}

//column level filtering
string colConds = "";
int qsColumns = Convert.ToInt32(qs["iColumns"]);
for (int i = 0; i < qsColumns; i++)
{
var searchableKey = "bSearchable_" + i;
var cSearchTermIndx = "sSearch_" + i;

if (qs.ContainsKey(searchableKey) && qs[searchableKey] == "true" && qs.ContainsKey(cSearchTermIndx) && !string.IsNullOrEmpty(qs[cSearchTermIndx]))
{
colConds += " AND " + qs["mDataProp_" + i] + " LIKE '%" + qs[cSearchTermIndx] + "%'";
}
}
if (colConds != "")
{
colConds = colConds.Substring(4);
}

//prepare execute sql query
string sqlQry = qry + mainConds;
//int totalRecords = await getTototalRecordsAsync(sqlQry);
int totalRecords = await _recordCountService.GetTotalRecordsAsync(sqlQry);

if (!string.IsNullOrEmpty(filterConds))
{
sqlQry += " AND " + filterConds;
}

if (!string.IsNullOrEmpty(colConds))
{
sqlQry += " AND " + colConds;
}
int recordsFiltered = await _recordCountService.GetTotalRecordsAsync(sqlQry);
if (!string.IsNullOrEmpty(orderBy))
{
sqlQry += orderBy;
}

int displaySkip = Convert.ToInt32(qs["iDisplayStart"]);
int displayLength = Convert.ToInt32(qs["iDisplayLength"]);

sqlQry += " OFFSET " + displaySkip + " ROWS FETCH NEXT " + displayLength + " ROWS ONLY";

var gates = _context.Database.SqlQueryRaw(sqlQry).ToList();

DataTableResponse response = new DataTableResponse();
response.draw = qs["sEcho"];
response.recordsTotal = totalRecords;
response.recordsFiltered = recordsFiltered;
response.data = gates;

var json = JsonConvert.SerializeObject(response);

return Content(json, "application/json");
}
в приведенном выше коде имя поля не прописано жестко, все условия полей генерируются динамически.

Подробнее здесь: https://stackoverflow.com/questions/790 ... conditions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»