Linq 查询无法反向工作

Linq Query Won't Work In Reverse

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

客户进行购买

这些表在 SQL 中是相关的,我可以使用以下方法获得结果:

from p in Purchases
where p.Price > 1000
where p.Customer.Name == "Mary"
select new 
{
    p.Customer.Name,
    p.Description,
    p.Price
}

但是,如果我颠倒表的顺序,select 首先从 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' does not contain a definition for 'Price' and no extension method 'Price' accepting a first argument of type 'System.Data.Linq.EntitySet' could be found (press F4 to add a using directive or assembly reference)

为什么我可以通过 Purchases 获取数据,而不能通过 Customer 获取?

因为c.Purchases是购买的合集,没有一个Price属性。

可以 将客户加入购买并获得 p.Price > 1000 处的所有结果,但您必须重复导航 属性 隐藏的加入子句:

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
}