LINQ 左外部联接 - 对象引用未设置为对象的实例
LINQ Left outer join - Object reference not set to an instance of an object
我有两个查询,如下所示:
var ret = (from x in _context.CustomUsers
where x.Name != currentUser
join c in _context.Claims on x.Name equals c.UserID into m
from c in m.DefaultIfEmpty()
select new UsersClients
{
UserName = x.Name,
DefaultClient = "N/A",
Role = null
}).ToList();
这个 returns 列表如下:
User1 N/A null
User2 N/A null
User3 N/A null
为此:
var q = (from x in _context.Claims
where x.Default == true
select new
{
x.UserID,
x.ClientName
}).ToList();
这个 returns 列表如下:
User1 Client1
User2 Client3
第一次查询returns次查询不存在的用户。然后我想对两个结果进行左外连接,这样我就可以从第二个查询中拉出客户端,如果它是空的。将其替换为字符串。
我的第三个查询如下所示:
var p = (from x in ret
join o in q on x.UserName equals o.UserID into l
from s in l.DefaultIfEmpty()
select new UsersClients
{
UserName = x.UserName,
DefaultClient = (s.ClientName == null ? "God dammit work" : s.ClientName),
Role = null
}).ToList();
我知道它失败的原因,只是不知道如何修复它。任何人都可以帮助我所以最终结果如下所示:
User1 Client2 null
User2 Client1 null
User3 Work dammit null
如果 l
为空,则 s
似乎已经是 null
。所以你也需要检查 s
是否有 null
:
DefaultClient = (s == null || s.ClientName == null ? "God dammit work": s.ClientName),
或在 C# 6 中并使用空合并运算符:
DefaultClient = s?.ClientName ?? "God dammit work",
我有两个查询,如下所示:
var ret = (from x in _context.CustomUsers
where x.Name != currentUser
join c in _context.Claims on x.Name equals c.UserID into m
from c in m.DefaultIfEmpty()
select new UsersClients
{
UserName = x.Name,
DefaultClient = "N/A",
Role = null
}).ToList();
这个 returns 列表如下:
User1 N/A null
User2 N/A null
User3 N/A null
为此:
var q = (from x in _context.Claims
where x.Default == true
select new
{
x.UserID,
x.ClientName
}).ToList();
这个 returns 列表如下:
User1 Client1
User2 Client3
第一次查询returns次查询不存在的用户。然后我想对两个结果进行左外连接,这样我就可以从第二个查询中拉出客户端,如果它是空的。将其替换为字符串。
我的第三个查询如下所示:
var p = (from x in ret
join o in q on x.UserName equals o.UserID into l
from s in l.DefaultIfEmpty()
select new UsersClients
{
UserName = x.UserName,
DefaultClient = (s.ClientName == null ? "God dammit work" : s.ClientName),
Role = null
}).ToList();
我知道它失败的原因,只是不知道如何修复它。任何人都可以帮助我所以最终结果如下所示:
User1 Client2 null
User2 Client1 null
User3 Work dammit null
如果 l
为空,则 s
似乎已经是 null
。所以你也需要检查 s
是否有 null
:
DefaultClient = (s == null || s.ClientName == null ? "God dammit work": s.ClientName),
或在 C# 6 中并使用空合并运算符:
DefaultClient = s?.ClientName ?? "God dammit work",