gpt4 book ai didi

c# - 左/右连接与查询中的多个连接

转载 作者:行者123 更新时间:2023-11-30 12:11:28 27 4
gpt4 key购买 nike

我有一个引用表,在这个表中有 3 个字段(IdUser1User2)。 User2 字段可以为空,但我们在不使用时使用 0。

当我执行下面的 Linq 查询时,User2 == 0 的记录不是结果的一部分。

在这种情况下如何进行左/右连接?

class MyReference
{
public int Id { get; set; }
public int User1 { get; set; }
public int User2 { get; set; }
}

class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

class MyClassResult
{
public int Id { get; set; }
public string U1FirstName { get; set; }
public string U2FirstName { get; set; }
}

var result =
(from myReference in context.MyReference
join u1 in context.USER on myReference.User1 equals User.Id
join u2 in context.USER on myReference.User2 equals User.Id
select new MyClassResult
{
Id = myReference.Id,
U1FirstName = u1.FirstName,
U2FirstName = u2.FirstName
}).ToList();

最佳答案

您必须使用 into 关键字和 DefaultIfEmpty获取空元素:

var result = (from myReference in context.MyReference
join u1 in context.USER on myReference.User1 equals u1.Id
join u2 in context.USER on myReference.User2 equals u2.Id into x2
from un2 in x2.DefaultIfEmpty()
select
new MyClassResult {
Id = myReference.Id,
U1FirstName = u1.FirstName,
U2FirstName = un2 != null ? un2.FirstName : null
});

作为替代方案,特别是如果 myReference.User1 也可以是 0,您可以使用 let 关键字在 final 之前获取用户信息选择:

var result = (from myReference in context.MyReference
let u1 = users.FirstOrDefault(u => u.Id == myReference.User1)
let u2 = users.FirstOrDefault(u => u.Id == myReference.User2)
select
new MyClassResult {
Id = myReference.Id,
U1FirstName = u1 != null ? u1.FirstName : null,
U2FirstName = u2 != null ? u2.FirstName : null
});

关于c# - 左/右连接与查询中的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15380086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com