1

我正在使用外键加入两个表。TABLE_1 可能有一行外键为空。这意味着当我根据该外键加入两个表时,我不会得到它的结果。我的问题是,当我在 LINQ 中使用 JOIN 两个表时,我得到一个空结果集。

即使 JOIN 结果与 TABLE_2 不匹配,我也希望能够获得 TABLE_1 中的行。

我尝试在 TABLE_2 的连接中使用 DefaultIfEmpty,但我仍然得到一个空的结果集。即使 TABLE_1 在用于 JOIN 两个表的外键中包含空值,如何加入两个表并仍然获得结果?

谢谢

4

2 回答 2

2

嗨,尝试从 Table2 左连接到 Table1

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;
}
于 2013-08-01T01:22:28.920 回答
0

如果 LEFT JOIN 不起作用,请尝试 RIGHT JOIN。

于 2013-08-01T00:30:12.830 回答