【发布时间】:2016-02-07 00:25:46
【问题描述】:
您好,我正在为我的项目使用MVC 5 和Entity Framework 6。
我有一个如下图所示的模型:
我需要从一组 Tag 对象开始查询实体产品。
请注意Tag对象是一个抽象类,实际上是通过Table-Per-Entity策略继承映射的。
这是我的函数方法的签名
public IEnumerable<Product> SerachByTag( IEnumerable<Tag> tagList );
在tagList参数中实际上会有Tag实现的具体实例。
如何进行此查询?
例如我可以在输入中接收以下数据结构
[
{ tagType: 1, stringProperty: "abc" },
{ tagType: 2, intProperty: 9 }
]
等等。过滤产品的更好方法是什么?例如,我当然可以首先为每个条件应用一个产品列表,然后将这些结果相交,如下例所示:
var p1 = ctx.Tags
.OfType<FirstTagType>()
.Where( x => x.StringProperty.Equals("abc") )
.Select( x => x.Products );
var p2 = ctx.Tags
.OfType<SecondTagType>()
.Where( x => x.IntProperty == 9 )
.Select( x => x.Products );
var results = p1.Intersect( p2 );
但在这种情况下,我的问题是关于表演的。此查询在使用许多过滤器时表现如何?
【问题讨论】:
-
如果您只是查询产品(而不关心标签的具体类型),您只需查询(抽象)标签数据库集。
-
@AlexKrupka:感谢您的回答。不幸的是,我需要考虑具体类型
标签: c# entity-framework asp.net-mvc-5 linq-to-entities