Синтаксис Linq-выбор нескольких столбцов


Это мой синтаксис Linq, который я использую для моей модели сущности

IQueryable<string> objEmployee = null;

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

Как я могу выбрать несколько столбцов? Как я хочу выбрать res.ID ну и ладно. И как я могу их получить? Я думаю, что это не сработает. И это называется Linq to SQL-правильно ?

3 80

3 ответа:

как показали другие ответы, вам нужно использовать анонимный тип.

что касается синтаксиса, я лично предпочитаю метод цепочки. Метод цепочки эквивалентно было бы: -

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

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

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };
 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. выберите сотрудника из БД как res.

  2. отфильтруйте сведения о сотруднике в соответствии с условием where.

  3. выберите необходимые поля из объекта employee, создав анонимный объект с помощью new { }