【问题标题】:Linq Syntax - Selecting multiple columnsLinq 语法 - 选择多列
【发布时间】: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 - 对吧?

【问题讨论】:

标签: c# linq entity-framework


【解决方案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_NAME}new {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} );
    

    说明:

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

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

    3. 通过使用 new { }

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

    【讨论】:

    • 在答案中添加解释。
    • 如何访问不同的列?
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 2017-08-03
    • 2012-08-07
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多