2013-03-23 75 views
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中加入該屬性。

UPDATE

實例來解決它

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

但我想用加入做到這一點。

+0

你想查詢結果是什麼? – 2013-03-23 23:44:19

+0

這是什麼'使用'方法? – 2013-03-23 23:58:14

+0

Using方法用於調用我的服務層以獲取數據。它是一種自定義方法,與我想要做的連接無關。 – 2013-03-24 00:05:12

回答

1

您必須在查詢結果都活動和聯繫人:

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

或選擇單個屬性這兩個對象。

編輯您的評論後:

你將無法讓小巧玲瓏填入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),但是......

+0

沒有幫助。我需要做activity.contact = contact – 2013-03-24 09:10:42

+0

好的,請看我的編輯。 – 2013-03-24 11:05:18

1

看起來你正在使用的實體框架

嘗試

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

對不起,我使用dapper,所以懶加載不是一個選項。 – 2013-03-23 23:53:15