Лямбда Выберите столбцы без выражения - PullRequest
0 голосов
/ 10 января 2019

Я хочу, чтобы запрос EF возвращал весь столбец, но я хочу выбрать этот столбец с переменной. Это может быть сделано? И.Е. используйте переменную вместо лямбда-выражения как таковое:

FieldValues = db.PbiData
  .Where(x => DatasetList.Contains(x.DatasetId))
  .Select(FieldName)
  .ToList()

FieldName всегда будет соответствовать одному из имен столбцов таблицы PbiData. Например, первое значение FieldName - «Отдел», и приведенный ниже запрос работает просто отлично:

FieldValues = db.PbiData
  .Where(x => DatasetList.Contains(x.DatasetId))
  .Select(x=>x.Department)
  .ToList()

Предложение where в каждом из этих запросов просто ограничивает возвращаемые данные данными, относящимися к текущему пользователю.

Моя попытка, согласно комментарию ниже:

    foreach(var F in model.FieldMetaData)
    {

        if (F.FieldType == "String")
        {
            PbiFieldData PbiFieldData = new PbiFieldData()
            {
                FieldName = F.FieldName,
                FieldValues = await db.PbiData.Where(x => DatasetList.Contains(x.DatasetId)).Select(F.FieldName).ToListAsync()
        };

            model.PbiData.Add(PbiFieldData);
        };
    }

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вы можете использовать System.Linq.Dynamic Nuget для цели

var fieldName = "Department";
var results = context.PbiData
                     .Where(x=> DatasetList.Contains(x.DatasetId))
                     .Select(fieldName);

Исходя из комментария, для преобразования в список можно использовать

var results = await context.PbiData
                     .Where(x=> DatasetList.Contains(x.DatasetId))
                     .Select(fieldName).ToListAsync();
0 голосов
/ 10 января 2019

Вы можете написать собственный SQL-запрос:

var FieldValues = ctx.Database.SqlQuery<string>
(
$@"select {fieldName} from PbiData 
where DatasetId in ({string.Join(", ", DatasetList.Select(x => $"'{x}'"))})"
).ToList();
0 голосов
/ 10 января 2019

да, вы можете использовать выражение

ParameterExpression param = Expression.Parameter(typeof(Table), yourVariable);
MemberExpression propExpression = Expression.PropertyOrField(param, yourVariable);
Expression<Func<Table, string>> selector = Expression.Lambda<Func<Table, string>>(propExpression, param);
var result = db.Table.Select(selector).First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...