2017-05-03 10 views
1

I持っている複合キーを持つ2つの関連企業:どのようにLINQクエリ2に参加する

public class Event 
{ 
    public string ID1 { get; set; } 
    public int ID2 { get; set; } 
    public DateTime EventDate { get; set; } 
    public string EventData { get; set; } 
    public string DocID1 { get; set; } 
    public int DocID2 { get; set; } 
} 

public class EventDocument 
{ 

    public string ID1 { get; set; } 
    public int ID2 { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Number { get; set; } 

    public virtual ICollection<Event> Events { get; set; } 
} 

いくつかの基準によって、最初にそれらの両方をフィルタリングする可能性があるし、次にため、レコードの大量の結果を結合するために?

事実上、私はEventDocumentsをフィルタリングするときに関連するイベントに到達できますが、EventとDocumentDocumentを一度にフィルタリングする必要もあります。

私はこのようにやろうとしています

var events = ModelContext.Events.AsNoTracking().Select(x => x); 
events = events.Where(x => x.EventData.StartsWith(FilterCriteria)); 


var eventDocuments = ModelContext.EventDocuments.AsNoTracking().Select(x => x); 
eventsDocuments = eventDocuments.Where(x => x.LastName.StartsWith(FilterLastName)); 

そして今、私は、クエリにこれらを結合し、結果を取得する必要があります - 濾過し、次のようにやろうとしている2つのエンティティ

からデータを参加しました:

var result = eventDocuments.Join(events, 
         doc => new { doc.ID1, doc.ID2 }, 
         ev => new { cross.DocID1, cross.DocID2}, 
         (doc, ev) => new { EventDocument = doc, Event = ev }); 
+0

はいイベントをeventDocumentsに結合します。何が問題ですか? –

+0

がエラーを持ってドン; tはそれをunderstant:重大度\tコード\t説明\t エラー\t CS0411 Enumerable.Join」メソッドの\t型引数(IEnumerableを、IEnumerableを、のFunc 、Func 、Func )は使用法から推論できません。型引数を明示的に指定してみてください。 – Songaila

+0

*なぜあなたは入会を頼んでいますか? eventDocumentを読み込むと、EFはそれらを 'Include()'に渡しても、イベントをロードします –

答えて

1

SelectManyで両方のセットを照会できます。クエリの構文では、次のようになります。

var eventsQry = 
    from eventDocument in eventDocuments 
    where eventDocument.LastName.StartsWith(FilterLastName) 
    from ev in events 
    where ev.EventData.StartsWith(FilterCriteria) && (ev.ID1 == eventDocument.ID1) && (ev.ID2 == eventDocument.ID2) 
    select new { eventDocument, ev }; 

結果をフィルタリングするために1つのクエリを使用する必要はありません。

+0

しかし、毎回多くの異なる基準でフィルタリングする必要があり、テーブルには多くの列があり、jusはいくつかの記述をしています。 – Songaila

+0

別々のクエリを定義してそれらに参加することができます。 – Sefe

+0

ラムダを使って書くことができますか? – Songaila

関連する問題