LINQ查询和ToList中的左联接

时间:2019-11-27 19:58:26

标签: c# linq left-join

我正在尝试使用联接功能在linq中应用联接表。但是我得到一个错误:

  

错误CS1941 join子句中的表达式之一的类型为   无效。类型推断无法调用“ GroupJoin”元素。

var query = from c in repos.GetTable<Table1>()
                            join ct in repos.GetTable<Table2>()
                            on c.Nr_PY equals ct.Nr_PY1 into g
                            from ct in g.DefaultIfEmpty()

                            select new
                            {
                                ct.Nr_PY1,
                                c.Name,

                            }.ToList();

您能帮我这段代码有什么问题吗?

谢谢您的帮助

2 个答案:

答案 0 :(得分:0)

根据我的“重复”注释中的答案,联接中的列名称必须相同。就您而言,应该是:

join ct in repos.GetTable<Table2>()
on c.Nr_PY equals new { Nr_PY = ct.Nr_PY1 } into g

答案 1 :(得分:0)

您的查询首先有多个错误,无法将Anonymous type转换为IList,您将得到以下错误:

  

无法将类型System.Collections.Generic.List AnonymousType#1隐式转换为   System.Collections.Generic.List

因此您可以像这样更改代码:

 var query = (from c in repos.GetTable<Table1>()
                        join ct in repos.GetTable<Table2>()
                        on c.Nr_PY equals ct.Nr_PY1 into g
                        from ct in g.DefaultIfEmpty()

                        select new myclass
                        {
                            value1=ct.Nr_PY1,
                            value2=c.Name,

                        }).ToList();

,第二个错误是Nr_PY,而Nr_PY1的类型不完全相同。

这是一个sql小提琴: https://dotnetfiddle.net/SBXLj2