?:LINQ查询中的运算符 [英] ?: Operator in LINQ Query

查看:65
本文介绍了?:LINQ查询中的运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • 如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆