【发布时间】:2011-09-19 03:46:15
【问题描述】:
我正在 EF4.1 上进行 lambda 选择,包括我当前语句中的另一个相关 DBSet。
return dbEntity.GameTypes.Include(a => a.Draws)
.Where(d => d.IsActive == true )
.ToList();
我有两个课程:
//simplified versions of the classes
public class GameType
{
public Nullable<bool> IsActive { get; set; }
public virtual ICollection<Draw> Draws { get; set; }
}
public class Draw
{
public int DrawID { get; set; }
public int GameTypeID { get; set; }
public System.DateTime DrawDate { get; set; }
}
但我只想要每个 GameType 的下一个即将到来的抽奖。基本上我想做类似的事情
return dbEntity.GameTypes.Include(a => a.Draws.Where(aw => aw.DrawDate > System.DateTime.Now)
.OrderBy(ao => ao.DrawDate)
.First())
.Where(d => d.IsActive == true )
.ToList();
但它给了我:
包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。
这样的事情可能吗,还是我需要在之后过滤结果?然后我还想按最新的 Draw.DrawDate 排序总结果。如果有人能告诉我正确的方法,我将不胜感激。
【问题讨论】:
-
您只能在导航属性上执行 .Include。 Peter Hancock 的查询很好,但您不需要在该查询中执行 Include。
-
我认为这取决于是否启用延迟加载和代理创建-如果启用,则不需要包含-如果没有,则包含
-
从 EntityFramework 4.1 你必须使用 System.Data.Entity: using System.Data.Entity ... MyDBContext.MySet.Include(o => o.MyAssociation)
标签: c# lambda include entity-framework-4.1