Лямбда: выбор столбцов без выражения

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

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

Имя поля всегда будет соответствовать одному из имен столбцов таблицы 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);
        };
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
101
3

Ответы 3

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

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();

Вы можете использовать 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();

Не думаю, что это то, что мне нужно. Как указано, имя столбца в списке выбора будет переменной, а не строкой.

extensionhelp 10.01.2019 03:59

@extensionhelp, когда вы говорите переменная. вы имеете в виду строковую переменную, у которой есть столбец? скажите columnName = "Department"? или ?

Anu Viswan 10.01.2019 04:03

@extensionhelp, если это так, как описано в OP, проверьте обновленный ответ

Anu Viswan 10.01.2019 04:06

Это не привело к ошибке, но когда я добавил ToList () в конец, она появилась. Есть идеи, почему?

extensionhelp 10.01.2019 04:40

Вы можете использовать .ToListAsync ().

Anu Viswan 10.01.2019 14:27

Ошибка - исключение NullReferenceException на model.PbiData.Add(PbiFieldData); ... Я обновил полный код в OP.

extensionhelp 10.01.2019 17:45

Позвольте нам продолжить обсуждение в чате.

Anu Viswan 11.01.2019 03:23

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

var FieldValues = ctx.Database.SqlQuery<string>
(
$@"select {fieldName} from PbiData 
where DatasetId in ({string.Join(", ", DatasetList.Select(x => $"'{x}'"))})"
).ToList();

Не повезло. Это немедленно вызывает ошибку на первом символе @ "Ключевое слово, идентификатор или строка, ожидаемые после дословного спецификатора @"

extensionhelp 11.01.2019 03:34

Я получаю сообщение об ошибке Invalid pseudocolumn "$abffc3b5". ... Я должен был упомянуть, что DatasetList и DatasetIds являются идентификаторами GUID, поэтому, возможно, их нужно рассматривать по-другому.

extensionhelp 11.01.2019 14:42

Чтобы уточнить, строка «abffc3b5» является частью GUID первого набора данных.

extensionhelp 11.01.2019 14:48

Другие вопросы по теме