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; ?它抛出一个错误:无效的匿名类型成员声明器 @DainiusKreivysselect 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 );
说明:
从数据库中选择员工作为资源。
根据 where 条件过滤员工详细信息。
通过使用 new
创建匿名对象,从员工对象中选择必填字段【讨论】:
在答案中添加解释。 如何访问不同的列?以上是关于Linq 语法 - 选择多列的主要内容,如果未能解决你的问题,请参考以下文章