我有一个非常简单的结构,我正在使用。
客户进行购买
表格与SQL相关,我可以使用以下方法获得结果:
from p in Purchases
where p.Price > 1000
where p.Customer.Name == "Mary"
select new
{
p.Customer.Name,
p.Description,
p.Price
}
但是,如果我颠倒了表的顺序并首先从Customers中选择,则会出错。
from c in Customers
where c.Name == "Mary"
where c.Purchases.Price > 1000
select new
{
c.Name,
c.Purchases.Description,
c.Purchases.Price
}
将查询放在LINQPad中会突出显示where c.Purchases.Price > 1000
行作为问题,错误消息为:
System.Data.Linq.EntitySet'不包含 定价' Price'并且没有延期方法' Price'接受一个 类型的第一个参数 ' System.Data.Linq.EntitySet'可以找到 (按F4添加using指令或程序集引用)
为什么我可以通过购买来获取数据,而不是通过客户来获取数据?
答案 0 :(得分:1)
因为c.Purchases
是购买的集合,并且没有单个Price
属性。
您可以加入客户购买并获取p.Price > 1000
所有结果,但是您必须重复导航属性隐藏的join子句:
from c in Customers
join p in Purchases on c.Id equals p.CustoimerId
where c.Name == "Mary" && p.Price > 1000
select new
{
c.Name,
p.Description,
p.Price
}