ENTITY FRAMEWORK OrderBy on Navigation Property(一对多)

时间:2014-03-11 15:46:52

标签: c# entity-framework

在我的EF CodeFirst DB中,我有两个实体:

public class Prod
{
   public int ProductId {get;set;}
   ......
   ......
   public ICollection<ProdLang> ProdLangs {get;set;}
}

public class ProdLang
{
   public int ProdLangId {get;set;}
   public int LangId {get;set;}
   public string Name {get;set;}
   public string Description {get;set;}
   ......
   ......
   public Product Product {get;set;}
}

通过Eager Loading,我想加载由 ProdLang.Name ProdLang.Description 订购的Prod集合,例如,通过单个 Langid

我该怎么办?

感谢。

2 个答案:

答案 0 :(得分:1)

你的意思是加载你订购的ProdLang系列......(而不是Prod的收集)?如果是这样,这应该可行

public class Prod
{
    private ICollection<ProdLang> _prodLangs;
    public ICollection<ProdLang> ProdLangs 
    {
        get{ return _prodLangs.OrderBy(p => p.Name).ToList(); }
        set{ _prodLangs = value; }
    }
}

答案 1 :(得分:0)

我在ProdLang类中看不到要与Prod类连接的ProductId属性,但我认为它存在。

所以,你需要这样做:

var products = from p in Context.Prod.Set
               from pl in Context.ProdLang.Set
               where (p.ProductId == pl.ProductId)
               orderby (pl.Name)
               select p;

如果您想获取ProdLang详细信息,可以使用动态类型:

var products = from p in Context.Prod.Set
               from pl in Context.ProdLang.Set
               where (p.ProductId == pl.ProductId)
               orderby (pl.Name)
               select new { Prod = p, ProdLang = pl };