Linq查询无法反向工作

时间:2015-02-04 19:20:19

标签: c# linq

我有一个非常简单的结构,我正在使用。

客户进行购买

表格与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指令或程序集引用)

为什么我可以通过购买来获取数据,而不是通过客户来获取数据?

1 个答案:

答案 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
}