我尝试使用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
}
但我想通过加入来做到这一点。
答案 0 :(得分:1)
看起来您正在使用实体框架
试
var model = activities.Include("Contact");
答案 1 :(得分: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
),但是是的......