我觉得以下应该是可能的,我只是不确定采取什么方法。
我想做的是使用 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
);
}
}
}
此代码将为您提供一个经销商列表,每个经销商都包含经过筛选的零件列表。每个部分都引用一个供应商。有趣的是,您必须按照所示方式在选择中创建匿名类型。否则,Dealership 对象的 Part 属性将为空。
此外,您必须在从查询中选择经销商之前执行 SQL 语句。否则经销商的 Part 属性将再次为空。这就是为什么我将 ToArray() 调用放在以下行中:
var dealers = query.ToArray().Select(o => o.Dealer);
但我同意达伦的观点,这可能不是你们图书馆的用户所期望的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)