-1
的接收器我有2执行外部联接这样的LINQ查询:LINQ的外连接和指定DefaultIfEmpty值 - 匿名类型不包含定义defaultifempty ..需要类型
var finalDataSet = from a in alpha
join b in beta on a.field1 equals b.field1
// *outer join*
join c in charlie on a.field2 equals c.field2 into c_2
from c2 in c_2.DefaultIfEmpty(new MyObject1 { MyProperty1 = (string) String.Empty, MyProperty2 = (DateTime?) null })
join d in delta on a.field3 equals d.field3
// *outer join*
join e in echo on a.field4 equals e.field4 into e_2
from e2 in e_2.DefaultIfEmpty(new MyObject2 { MyProperty3 = String.Empty, MyProperty4 = String.Empty })
orderby a.field1
select new
{
FinalProperty1 = a.field1,
FinalProperty2 = a.field2,
etc ...
..和
MyObject1:
public class MyObject1
{
public string MyProperty1 { get; set; }
public DateTime? MyProperty2 { get; set; }
}
MyObject2:我对我newing弥补了 'DefaultIfEmpty' 值类型的类型定义
public class MyObject2
{
public string MyProperty3 { get; set; }
public string MyProperty4 { get; set; }
}
第二届外连接(以“回声”)是好的,但对于第一次,我得到的编译错误,当我引用这条线上C_2:
from c2 in **c_2** --> compiler doesn't like the reference to c_2
我得到这个错误:
IEnumerable <<anonymous type: string Property1, DateTime? Property2 >> does not contain a definition for 'DefaultIfEmpty' and the best extension method overload 'Queryable.DefaultIfEmpty' <MyObject1>(IQueryable<MyObject1>, MyObject1)' requires a receive of type 'IQueryable<LatestExpiredSchedule>'
为什么我得到这个错误为我的第一次加入,而不是第二次?如果我将第一次加入更改为:
from e2 in e_2.DefaultIfEmpty()
我没有收到错误,但我需要明确指定默认值。错误消息的真正含义是什么,以及如何指定我的第1个左外部联接的默认值?
请参阅msdn left outer join:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng