2014-09-20 49 views
0

如何包含相關實體,但只選擇頂級1?Linq選擇頂級1相關實體

public EntityFramework.Member Get(string userName) 
    { 
     var query = from member in context.Members 
        .Include(member => member.Renewals) 
        where member.UserName == userName 
        select member; 
     return query.SingleOrDefault(); 
    } 
+0

我想你的願望條件包括此功能不存在於EF到目前爲止您可以在這裏上傳:https://entityframework.codeplex.com/workitem/47 – 2014-09-20 12:25:18

+0

可能的重複[如何使用實體框架包括條件?] (http://stackoverflow.com/questions/24380345/how-to-use-entity-framework-include-with-condition) – 2014-09-20 12:26:29

回答

2

根據MSDN:

「請注意,這是目前不可能過濾其相關實體被載入包括將始終在所有相關實體帶來的。」

http://msdn.microsoft.com/en-us/data/jj574232

也有此功能的UserVoice的項目:

http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015345-allow-filtering-for-include-extension-method

使用匿名對象作品的方法,即使它,你希望它是不是乾淨:

public Member GetMember(string username) 
    { 
     var result = (from m in db.Members 
        where m.Username == username 
        select new 
        { 
         Member = m, 
         FirstRenewal = m.Renewals.FirstOrDefault() 
        }).AsEnumerable().Select(r => r.Member).FirstOrDefault(); 

     return result; 

    } 

FirstRenewal屬性僅用於使EF6首次更新到第會員對象。因此,從GetMember()方法返回的成員僅包含第一次續約。

此代碼爲數據庫生成單個查詢,因此對於您來說可能已經足夠了。