?:LINQ查询中的运算符 [英] ?: Operator in LINQ Query
问题描述
-
如何在LINQ查询的SELECT子句中使用?:运算符?如果无法做到这一点,我该如何模仿呢?目的是在我的select子句中获得一个CASE块.您可能会怀疑,我收到一个错误消息:无效的匿名类型成员声明符.必须使用成员分配,简单名称或成员访问权限来声明匿名类型成员.
这是说从a.ipid = i.id上的内部联接i到i.uid = u.id上的内部联接u"的正确方法还是足够的方法?如果没有,请提供一个.谢谢.
Is this the proper way, or a sufficient way, to say "from a inner join i on a.ipid=i.id inner join u on i.uid=u.id"? If not, please provide one. Thanks.
var query =
from a in db.tblActivities
from i in db.tblIPs
from u in db.tblUsers
select new {
u.UserName == null
? i.Address
: u.UserName,
a.Request,
a.DateTime };
推荐答案
创建匿名类型(您在不指定类型的情况下对"new"进行的操作)时,必须为每个属性指定成员名称.从您的示例来看,它看起来像这样:(还修复了您的联接)
When creating an anonymous type (what you're doing with the "new" without specifying a type) you have to specify the member name for each property. From your example, it would look something like this: (also fixed your joins)
var query = from a in db.tblActivities
join i in db.tblIPs on a.ipid equals i.id
join u in db.tblUsers on i.uid equals u.id
select new {
UserName = (u.UserName ?? i.Address),
Request = a.Request,
Date = a.DateTime
};
您也可以用自己的方式来创建用户名:
You could probably do the UserName your way, too:
UserName = (u.UserName == null) ? i.Address : u.UserName,
但是??运算符更加简洁.它类似于SQL中的"isnull".
but the ?? operator is more concise. It's similar to "isnull" in SQL.
这篇关于?:LINQ查询中的运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!