有人可以告诉我为什么这个简单的连接不会编译?它不会识别财产"名称"或匿名类型m和l。错误消息是:
错误1名称' m'不在' equals'左侧的范围内。 考虑交换等于' equals'两侧的表达式。
错误2名称' l'不等于'等于'#39;的右侧。 考虑更换等号'。
两侧的表达式
var l1 = new List<L1>();
var m2 = new List<M2>();
var rs = from l in l1
join m in m2 on m.Name equals l.Name
select new {l1};
public class L1
{
public string Name { get; set; }
}
public class M2
{
public string Name { get; set; }
}
答案 0 :(得分:3)
首先,join m in m
应该是join m in m2
。其次,在equals
中操作数的LINQ顺序很重要,所以它应该是l.Name equals m.Name
。
答案 1 :(得分:1)
与SQL相反,LINQ对比较表达式中操作数的顺序很敏感。在m.Name
运算符周围交换l.Name
和equals
:
join m in m2 on l.Name equals m.Name