2017-07-04 11 views
-1

の受信機が必要です。のLINQ外部結合とDefaultIfEmpty値を指定 - 匿名型はdefaultifemptyの定義が含まれていません..私は2外側は次のように加入行いLINQクエリ持つタイプ

  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:私は 'DefaultIfEmpty' の値についてNEWINGアップだタイプのための私のタイプの定義

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>' 

2回目ではなく1回目の参加でこのエラーが発生するのはなぜですか?最初の参加を変更した場合:

from e2 in e_2.DefaultIfEmpty() 

私はエラーにはなりませんが、明示的にデフォルトを指定する必要があります。エラーメッセージはどういう意味ですか、そして、最初の左外部結合のデフォルトをどのように指定する必要がありますか?

+0

msdn左外部結合を参照してください。https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

答えて

0

答えを見つけました - 私の 'charlie'は上記のクエリでlinqクエリの結果でしたので、匿名の型を返します。私は、そのクエリによって返された各結果に対してMyObject1のオブジェクトを構築する必要がありました。

関連する問題