0

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という名前のプロパティがあり、Contactsからそのプロパティに参加したいと思います。

アップデート

それを解決するための例

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

しかし、私はこれを参加してやりたいと思っています。

4

2 に答える 2

1

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

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)を意図したメソッドを悪用しているため、醜いですが、ええ...

于 2013-03-24T00:16:23.797 に答える
1

EntityFrameworkを使用しているようです

試す

var model = activities.Include("Contact");
于 2013-03-23T23:51:15.323 に答える