2011-01-09 22 views
0

我希望我的措辞很有道理......我不太确定如何解释我想要做的事情。我可以为实体框架模型创建“中继”或“通用化”属性吗?

我有一个泛型类的方法是如下返回实体的名单:

public abstract class ChildCRUDController<TModel> : CRUDController<TModel, ... > 
    where TModel : IChildEntity 

public ViewResult List(int id) 
{ 
    return View(repository.GetMany(x => x.ParentID == id)); 
} 

该控制器由其他相当多的控制器来实现。我遇到的问题是,并非所有实现IChildEntity的实体都具有相同的父类型。为了解决这个问题,我为所有实现IChildEntity的模型创建了ParentID属性,以便他们可以使用相同的控制器。

public partial class PhoneNumber : IChildEntity 
{ 
    public int ParentID 
    { 
     get { return CustomerID; } 
     set { CustomerID = ParentID; } 
    } 
} 

和...

public partial class Transaction : IChildEntity 
{ 
    public int ParentID 
    { 
     get { return LeaseID; } 
     set { LeaseID= ParentID; } 
    } 
} 

但是当我打电话的名单上面的方法,我得到了以下错误:

The specified type member 'ParentID' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

有没有什么办法可以达到的效果我寻找没有拉动设置到内存中的对象或重命名实体本身的所有属性?

谢谢!

回答

1

如果你愿意的字段名传递到List方法,构建自己的查询就可以使用这个StackOverflow的文章中描述的技术做到这一点:

或者您可以为ChildCRUDController提供另一个通用类型参数,该参数被约束为提供字段名称的接口并再次动态使用它。

+0

不知道动态LINQ库。谢谢! – 2011-01-09 18:42:50

相关问题