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; 

此代码只会选择没有任何加入的活动。该活动有一个名为联系人的属性,我想从联系人中加入该属性。

更新

解决它的例子

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;
}

其中模型是查询.ToList()

另一种有效但丑陋的方法可能是:

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

立即返回修改后的活动。它很丑陋,因为它滥用了一种旨在成为无状态(Select)的方法,但是是的......

于 2013-03-24T00:16:23.797 回答
1

看起来您正在使用实体框架

尝试

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