?:LINQ查询中的运算符

  • 如何在LINQ查询的SELECT子句中使用?:运算符? 如果无法做到这一点,我该如何模仿呢? 目标是在我的select子句中获取CASE块。 您可能怀疑,我收到一个错误: 无效的匿名类型成员声明符。 必须使用成员分配,简单名称或成员访问声明匿名类型成员。

  • 这是一种正确的方式,还是一种充分的方式,可以说“从内部联接i on a.ipid = i.id inner join u on i.uid = u.id”? 如果没有,请提供一个。 谢谢。

    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”而不指定类型时)时,必须为每个属性指定成员名称。 从您的示例中,它看起来像这样:(也修复了您的连接)

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

您也可以按自己的方式使用UserName:

 UserName = (u.UserName == null) ? i.Address : u.UserName, 

但是?? ?? 运算符更简洁。 它类似于SQL中的“isnull”。

您必须使用join关键字,并定义实体之间的关系,以便进行正确的内部连接。

在这里你可以找到一些关于它的例子,我也强烈建议你使用LinqPad ,它是一个非常有价值的测试你的查询的工具,也是非常好的学习,它有200多个例子。

如果你只是检查null,你也可以使用?

 string something = null; string somethingElse = something ?? "default value"; 

至于上面的例子,做那些去做的是正确的。

 string something = (somethingElse == null ? "If it is true" : "if it is false"); 

parens不是必需的,但它们确实有助于阅读。

真。 这个问题取决于您的linq表达式将返回的IQueryable的特定实现。 我看到你有db.XXX所以你使用linq到sql或一些linq到数据存储? 如果是这样,IQueryable的具体实现需要有一种方法将表达式转换为商店表达式。 除了上述注释之外,其他一些注释是正确的,在匿名类型中,您必须为每个成员指定一个名称。 这真的是你的错误。

我对Linq to SQL相当新,但我很确定它会像这样:

 var query = from a in db.tblActivities from i in a.tblIPs from u in i.tblUsers select new { userName = (u.UserName == null) ? i.Address : u.UserName, a.Request, a.DateTime }; 

if语句需要在括号中,结果在它们之外。 至于连接,你从一个 – >多个跟随链。