在这种情况下,我提供了一种以各种方式查询数据的方法。我们为用户提供4种不同的Fitler标准,他们可以随心所欲地进行混合和匹配。
例如:
public Fruit GetFruit(Boolean isLocal, string storeName, string classificationType, string state);
当所有属性都在表中时,这很简单,但我的问题是由于数据模型的复杂性而产生的。我的三个属性很简单,它们只是连接,但我有一个表位于一对多关系的后面。所以为了查询它,我必须进行多对多的连接。
所以假设我正在努力确定一家商店提供的所有水果。一家商店有水果清单,我们的分类类型位于许多关系的后面(水果分类)
alt text http://tinyurl.com/39q6ruj
在ef中,唯一成功的查询方法是选择所有水果(按分类),然后选择所有符合筛选条件的商店,然后加入它们。
您会认为ef中的这个查询是有用的:
var final = (
from s in Stores
join fc in FruitClassifications.Where(z=>z.Classifications.Code == classificationType && z.Classifications.Type.Code =="FRT").Select(x=>x.Fruit).Distinct()
on s.Fruits.Id equals f.Id
where s.Name=name && s.isLocal && s.State==state
select s
).ToList();
但是它运行得很糟糕(当我分析它时看起来也一样),有没有任何方法可以将这个查询下推到数据库中?更好的查询方式?