Linq语法 - 选择多个列

时间:2011-07-21 06:45:28

标签: 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;

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

3 个答案:

答案 0 :(得分:164)

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

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

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

答案 1 :(得分:68)

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

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

答案 2 :(得分:3)

 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. 从db中选择员工作为res。

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

  3. 通过使用新的{}

  4. 创建匿名对象,从员工对象中选择必填字段