gpt4 book ai didi

c# - 加入多对多表

转载 作者:行者123 更新时间:2023-11-30 17:22:05 25 4
gpt4 key购买 nike

我有一种情况,我提供了一种以各种方式查询数据的方法。我们为用户提供了 4 种不同的 fitler 标准,他们可以随意混合和匹配。

例如:

 public Fruit GetFruit(Boolean isLocal, string storeName, string classificationType, string state);

当所有属性都在表中时,这很简单,但我的问题是由于数据模型的复杂性而出现的。我的三个属性很简单,它们只是连接,但我有一个表位于一对多关系后面。因此,为了查询它,我必须进行多对多连接。

假设我正在尝试确定一家商店提供的所有水果。一家商店有一个水果列表,我们的分类类型位于许多关系 (FruitClassification) 的后面

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();

但它运行起来很糟糕(当我分析它时看起来一样),有什么方法可以将这个查询下推到数据库吗?更好的查询方式?

最佳答案

我想这就是你想要的:

var final = (from s in Stores
where s.Name=name && s.isLocal && s.State==state
&& s.Fruits.Any(f =>
f.FruitClassifications.Any(fc => fc.Code == classificationType
&& fc.Type.Code == "FRT"))
select s).ToList();

关于c# - 加入多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com