我使用外键加入两个表。 TABLE_1可能有一个外键为null的行。这意味着当我根据该外键加入两个表时,我不会得到它的结果。我的问题是,当我在LINQ中使用JOIN两个表时,我得到一个空的结果集。
我希望能够获取TABLE_1中的行,即使JOIN结果与TABLE_2不匹配。
我尝试在TABLE_2的连接中使用DefaultIfEmpty,但我仍然得到一个空的结果集。即使TABLE_1在用于加入两个表的外键中包含null,我如何连接两个表仍然得到结果?
由于
答案 0 :(得分:2)
您好尝试从表2到表1的左连接
class Program
{
static void Main(string[] args)
{
List<Table1> Table_1 = new List<Table1>();
Table_1.Add(new Table1() { Id = 1, Name = "Lion" });
Table_1.Add(new Table1() { Id = 2, Name = "Elephant" });
List<Table2> Table_2 = new List<Table2>();
Table_2.Add(new Table2() { Id = 1, Class = "Carnivorous" });
Table_2.Add(new Table2() { Id = 2, Class = "Herbivorous" });
Table_2.Add(new Table2() { Id = 3, Class = "Mammal" });
Table_2.Add(new Table2() { Id = 4, Class = "Aquarious" });
var result = (from a in Table_2
join b in Table_1
on a.Id equals b.Id into leftJoin
from c in leftJoin.DefaultIfEmpty()
select new { Id = a.Id, Name = c == null ? string.Empty : c.Name, Class = a.Class }
).ToList();
var abc = result;
}
}
public class Table1
{
public int Id;
public string Name;
}
public class Table2
{
public int Id;
public string Class;
}
答案 1 :(得分:0)
如果LEFT JOIN不起作用,请尝试右键。