Linq选择前1名相关实体

时间:2014-09-20 10:26:37

标签: entity-framework entity-framework-6

如何包含相关实体,但只选择前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();
    }

1 个答案:

答案 0 :(得分: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将第一次续订加载到Member对象中。因此,从GetMember()方法返回的成员仅包含第一次续订。

此代码会为数据库生成一个查询,因此它可能对您来说足够好。

相关问题