Linq 语法 - 选择多列

Posted

技术标签:

【中文标题】Linq 语法 - 选择多列【英文标题】:Linq Syntax - Selecting multiple columns 【发布时间】:2011-07-21 06:45:28 【问题描述】:

这是我用于实体模型的 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 - 对吧?

【问题讨论】:

LinqToSql 和实体框架不同。见***.com/questions/8676/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

你能建议如何正确编写这个表达式:select new (DateTime.Now - debt.ClaimDate), debt.Amount; ?它抛出一个错误:无效的匿名类型成员声明器 @DainiusKreivys select new Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount。答案中使用的形式是简写,其中初始化表达式中的成员名称用作匿名类型的字段名称。例如。 new res.EMAIL, res.USER_NAMEnew EMAIL = res.EMAIL, USER_NAME = res.USER_NAME 的简写。如果有一个表达式,就像你的日期一样 - 速记不适用,因此编译器错误。【参考方案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 );

说明:

    从数据库中选择员工作为资源。

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

    通过使用 new

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

【讨论】:

在答案中添加解释。 如何访问不同的列?

以上是关于Linq 语法 - 选择多列的主要内容,如果未能解决你的问题,请参考以下文章

C# Linq 如何选择数据表中多列的不同行数

将 LinQ 与多列分组一起使用

如何选择具有最低属性 linq 查询语法的对象

对集合多列进行求和方法的选择

如何在linq中选择All(*)到sql

使用 EF 生成的 MySQL 在 LinQ 中为 FromSqlRaw 在从系统中选择变量时返回“SQL 语法错误”