gpt4 book ai didi

linq - 有条件地包含在实体中吗?

转载 作者:行者123 更新时间:2023-12-03 11:56:37 33 4
gpt4 key购买 nike

我觉得以下方法应该可行,但我不确定该采用哪种方法。

我想做的是使用include方法来调整结果的形状,即定义对象图要遍历的距离。但是...我希望遍历是有条件的。

something like...

dealerships
.include( d => d.parts.where(p => p.price < 100.00))
.include( d => d.parts.suppliers.where(s => s.country == "brazil"));

我知道这不是有效的linq,实际上,这是非常错误的,但是从本质上讲,我正在寻找某种方法来构建将返回成形结果的表达式树,等效于...
select *
from dealerships as d
outer join parts as p on d.dealerid = p.dealerid
and p.price < 100.00
outer join suppliers as s on p.partid = s.partid
and s.country = 'brazil'

重点介绍加入条件。

我觉得这对于esql来说是相当简单的,但是我的首选是即时构建表达式树。

一如既往地感谢任何建议或指导

最佳答案

这应该可以解决问题:

using (TestEntities db = new TestEntities())
{
var query = from d in db.Dealership
select new
{
Dealer = d,
Parts = d.Part.Where
(
p => p.Price < 100.0
&& p.Supplier.Country == "Brazil"
),
Suppliers = d.Part.Select(p => p.Supplier)
};

var dealers = query.ToArray().Select(o => o.Dealer);
foreach (var dealer in dealers)
{
Console.WriteLine(dealer.Name);
foreach (var part in dealer.Part)
{
Console.WriteLine(" " + part.PartId + ", " + part.Price);
Console.WriteLine
(
" "
+ part.Supplier.Name
+ ", "
+ part.Supplier.Country
);
}
}
}

此代码将为您提供经销商列表,每个经销商都包含一个经过筛选的零件列表。每个部分都引用一个供应商。有趣的是,您必须按照所示方式在select中创建匿名类型。否则,Dealership对象的Part属性将为空。

同样,您必须执行SQL语句,然后才能从查询中选择经销商。否则,经销商的零件属性将再次为空。这就是为什么我将ToArray()调用放在以下行中的原因:
var dealers = query.ToArray().Select(o => o.Dealer);

但是我同意达伦(Darren)的观点,这可能不是您的图书馆用户所期望的。

关于linq - 有条件地包含在实体中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085462/

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