Linq语法 - 选择多个列

Riz*_*Riz 87 c# linq entity-framework

这是我用于实体模型的Linq语法

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;
Run Code Online (Sandbox Code Playgroud)

如何选择多列?就像我想选择res.ID一样.我怎么能收到那些?我认为,IQueryable是行不通的.这被称为Linq to SQL - 对吗?

Ada*_*lph 172

正如其他答案所示,您需要使用匿名类型.

就语法而言,我个人更喜欢方法链.链接等效的方法是: -

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

AFAIK,声明性LINQ语法在编译时转换为与此类似的方法调用链.

UPDATE

如果你想要整个对象,那么你只需要省略对它的调用Select(),即

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);
Run Code Online (Sandbox Code Playgroud)


Iva*_*lov 70

您可以使用匿名类型,例如:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };
Run Code Online (Sandbox Code Playgroud)


Bim*_*zee 5

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );
Run Code Online (Sandbox Code Playgroud)

或者你可以使用

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

解释 :

  1. 从数据库中选择员工作为 res。

  2. 根据 where 条件过滤员工详细信息。

  3. 通过使用 new { } 创建 Anonymous 对象,从员工对象中选择所需字段