2013-04-25 49 views
0

我有三个简单的类如何添加复杂的财产EF代码第一次

public class Asset 
{ 
    public int ID {get;set;} 
    public virtual Category {get;set;} 
} 

public class Category 
{ 
    public int ID {get;set;} 
} 

public class AssetCollection 
{ 
    public int ID {get;set;} 
    public virtual ICollection<Asset> Assets {get;set;} 

    ??????public bool HasAssetWithCategory(int ID) 
    { 
    ???????????? 
    } 
} 

我希望能够选择从上下文中HasAssetWithCategory这样

var assets = context.AssetCollections.Where(m => m.HasAssetWithCategory(SomeID)); 

我没有线索甚至从哪里开始。

回答

0

HasAssetCategory是您已经定义且不能转换为SQL语句的方法。因此,EntityFramework无法执行您拥有的查询。相反,你应该尝试此查询,

var assets = context.AssetCollections.Where(m => m.Assets.Any(a => a.ID == someID)); 
+0

所以我不能添加此类似属性,而是我需要我必须使用它的任何地方写? :( – SpoksST 2013-04-25 15:29:25

+0

你可以在你的上下文中为它添加一个方法,或者把整个东西包装到一个仓库中。 – Stu 2013-04-25 18:50:45

+0

这个问题让我很好奇在EF中实现扩展方法。在codereview上有一个关于创建泛型辅助方法的相关文章为实体生成POCO - http://codereview.stackexchange.com/questions/3895/creating-extension-method-to-map-entity-with-subentities-object-to-poco-object。阅读一些评论因为他们可能会帮助您完成此任务,特别是将'SomeID'传递给'MemberInitExpression'的一个实例http://msdn.microsoft.com/zh-cn/library/bb301790.aspx。实际上,我喜欢扁平化我的实体进入视图模型。 – 2013-04-26 11:33:11