行でナビゲーションプロパティを結合する

c# dapper linq

質問

LINQを使用してナビゲーションプロパティに参加しようとしています。これは私のコードです

    var activities = Using<GetActivitiesForUser>()
        .Execute(User.DisplayAs, User.MarketId);

    var contacts = Using<GetContactsForUser>()
        .Execute(User.DisplayAs, User.MarketId);

    var model = from activity in activities
                join contact in contacts
                on activity.ContactId equals contact.ContactId
                select activity; 

このコードでは、参加なしのアクティビティのみが選択されます。アクティビティにはContactという名前のプロパティがあり、連絡先からそのプロパティに参加したいと思います。

更新

それを解決する例

foreach(var activity in activities)
{
activity = from contact in contacts
where contact.ContactId=activity.ContactId
select contact
}

しかし、私はこれを結合でやりたい

受け入れられた回答

クエリ結果にアクティビティと連絡先の両方を含める必要があります。

from activity in activities
join contact in contacts
on activity.ContactId equals contact.ContactId
select new { activity, contact }; 

または両方のオブジェクトの個々のプロパティを選択します。

あなたのコメントの後に編集

Dapperにactivity.contactを入力させることはできません。故意にシンプルに保たれます。あなたができることは、結果をループしてプロパティを自分で設定することです。

foreach(var anon in model)
{
    anon.activity.contact = anon.contact;
}

modelはクエリ.ToList()です。

効果的ではあるが醜い方法があります:

model.Select(x => { x.activity.contact = x.contact; return activity; }).ToList();

変更されたアクティビティはすぐに返されます。ステートレス( Select )になることを意図したメソッドを悪用するので、醜いですが、ええ...


人気のある回答

Entity Frameworkを使用しているようです

お試しください

var model = activities.Include("Contact");


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ