Синтаксис Linq - Вибір кількох стовпців


96

Це мій синтаксис Linq, який я використовую для своєї моделі сутності

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

Як я можу вибрати кілька стовпців? Мовляв, я хочу також вибрати і res.ID. І як я можу їх отримати? IQueryable не буде працювати, я думаю. І це називається Linq to SQL - так?


3
LinqToSql та структура сутності відрізняються. Див stackoverflow.com/questions/8676 / ...
Гідеон

Відповіді:


189

Як вказують інші відповіді, потрібно використовувати анонімний тип.

Що стосується синтаксису, я особисто надаю перевагу ланцюжку методів. Еквівалентним методом ланцюжка буде: -

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

AFAIK, декларативний синтаксис LINQ при компіляції перетворюється на ланцюжок викликів методу, подібний до цього.

ОНОВЛЕННЯ

Якщо ви хочете весь об'єкт, тоді вам просто потрібно пропустити виклик Select(), тобто

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);

72

Ви можете використовувати анонімні типи, наприклад:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };

чи можете ви підказати, як правильно написати цей вираз: виберіть new {(DateTime.Now - debt.ClaimDate), debt.Amount}; ? Виникає помилка: Недійсний декларатор анонімного типу
Dainius Kreivys

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. Форма, що використовується у відповіді, є скороченою, де ім'я члена у виразі ініціалізації використовується як ім'я поля анонімного типу. Наприклад new {res.EMAIL, res.USER_NAME}, це скорочення для new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. Якщо є вираз, як у вашому випадку з датами - скорочення не застосовується, отже, помилка компілятора.
Іван Данилов

5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

АБО ви можете використовувати

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

Пояснення:

  1. Виберіть співробітника в базі даних як результат.

  2. Фільтруйте дані працівника відповідно до умови де.

  3. Виберіть необхідні поля з об’єкта працівника, створивши анонімний об’єкт, використовуючи новий {}


додайте пояснення у відповідь.
Сандіп

Як ви отримуєте доступ до різних стовпців?
ARidder101,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.