C# C实体框架:Linq筛选子代并对具有属性的父代进行选择

C# C实体框架:Linq筛选子代并对具有属性的父代进行选择,c#,.net,entity-framework,linq,.net-core-2.2,C#,.net,Entity Framework,Linq,.net Core 2.2,我们公司目前正在使用实体框架Net Core 2.2和Sql Server 尝试查找购买特定产品输入参数的所有不同客户。 编写以下EF Linq查询是为了获得不同的客户 后来又出现了另一个问题,我们如何获得更多的客户导航属性?应包括放置在何处之前或之后的位置?这有关系吗?运行SQL探查器时,它没有注意到查询中的差异。我只是想确定在某些情况下,包含在此处的位置是否重要 select distinct c.customerName from dbo.customer customer inner j

我们公司目前正在使用实体框架Net Core 2.2和Sql Server

尝试查找购买特定产品输入参数的所有不同客户。 编写以下EF Linq查询是为了获得不同的客户

后来又出现了另一个问题,我们如何获得更多的客户导航属性?应包括放置在何处之前或之后的位置?这有关系吗?运行SQL探查器时,它没有注意到查询中的差异。我只是想确定在某些情况下,包含在此处的位置是否重要

select distinct c.customerName
from dbo.customer customer
inner join dbo.Transactions transaction
    on transaction.customerid = customer.customerid
inner join dbo.Purchases purchases
    on purchases.PurchaseId = transaction.PurchaseId
inner join dbo.Product product 
    on transaction.ProductId = product.ProductId
where tra.BKProduct = @ProductInput
原始解决方案:

另一个问题出现了,我们需要获得更多的客户导航属性

备选案文1:

备选案文2:


在这种特殊情况下,这可能无关紧要

因为c Include是关于所生成sql的选择和连接

但是,您不想使用it not matter作为总括语句

请参见下面的答案以及总体问题和其他答案

当您开始输入Where和OrderBy之类的内容时,操作的顺序可能很重要

始终查看生成的sql并问问自己它看起来合理吗?你已经从你的问题中做到了:……我主要是为了将来的读者提到这一点

因此,在这种特殊情况下,这是一种偏好。我通常把它放在哪里 最后的所以你的第一个例子符合我个人的偏好


对于进一步的调查,请查看类似这样的内容:

在这个特定的案例中,这可能并不重要

因为c Include是关于所生成sql的选择和连接

但是,您不想使用it not matter作为总括语句

请参见下面的答案以及总体问题和其他答案

当您开始输入Where和OrderBy之类的内容时,操作的顺序可能很重要

始终查看生成的sql并问问自己它看起来合理吗?你已经从你的问题中做到了:……我主要是为了将来的读者提到这一点

因此,在这种特殊情况下,这是一种偏好。我通常把它放在哪里 最后的所以你的第一个例子符合我个人的偏好


对于进一步的调查,请查看以下内容:

正确的术语是属性。根据这一观察,在C/.NET中,属性是另一种东西。我编辑了这个问题,使用短语导航属性而不是属性。留下这个,让未来的读者知道你不是在编造@pinkfloyd,正确的术语是属性。根据这一观察,在C/.NET中,属性是另一种东西。我编辑了这个问题,使用短语导航属性而不是属性。留下这个,让未来的读者知道你不是在编造@pinkfloydhi,你能回答这个问题吗?谢谢,你能回答这个问题吗?谢谢
var customerData = db.Customer
                      .Where(p => p.Transactions.SelectMany(c => c.Purchases).Select(gc => gc.Product.Where(gc => gc.BKProduct == ProductInput).Any());
var customerData = db.Customer
                      .Include(c=>c.CustomerType)
                      .Include(c=>c.CustomerAddress)
                      .Where(p => p.Transactions.SelectMany(c => c.Purchases).Select(gc => gc.Product.Where(gc => gc.BKProduct == ProductInput).Any());
var customerData = db.Customer
                      .Where(p => p.Transactions.SelectMany(c => c.Purchases).Select(gc => gc.Product.Where(gc => gc.BKProduct == ProductInput).Any())
                      .Include(c=>c.CustomerType)
                      .Include(c=>c.CustomerAddress)