我要把Lambda表达式串在一起 这就是我所拥有的。
var products = context.Products.Select(c => c);
if (input.DefendantId != null)
{
products = products
.Where(p => p.DefendantId == input.DefendantId);
}
但是现在,DefendantId已从Product表中删除,因此我需要在转折表(ProductDefendant)上添加join子句,同时仍返回
IQueryable<Product>
ProductDefendant表中同时具有ProductId和DefendantId。
下面是类似的内容,但是我不确定如何获取使用where子句的最后一部分,因为p.ProductDefendant
是List<ProductDefendant>
if (input.DefendantId != null)
{
products = products
.Join(context.ProductDefendant,
p => p.Id,
pd => pd.ProductId,
(p, pd) => new Product())
.Where(p => p.ProductDefendant.DefendantId == input.DefendantId);
}
我将它写为linq,但我想改用Lambda表达式。
这是门廊
products =
from p in products
join pd in context.ProductDefendant
on p.Id equals pd.ProductId
where pd.DefendantId == input.DefendantId
select p;
然后到最后,我似乎无法获得“ DefendantCode”,它是ProductDefendant和被告之间的联接
var productsVM = products.Select(c => new GetProductsReturnViewModel
{
Id = c.Id,
ProductName = c.ProductName,
DefendantCode = c.ProductDefendants.First().Defendant.DefendantCode // only gets teh first, not the correct code
});
答案 0 :(得分:1)
如果我对您的理解正确,则需要先在Product
中选择ProductDefendant
和Join
,然后仅选择Select
Product
Where
过滤结果之后的部分:
products = products
.Join(context.ProductDefendant,
p => p.Id,
pd => pd.ProductId,
(p, pd) => new {Product = p, ProductDefendant = pd})
.Where(joined => joined.ProductDefendant.DefendantId == input.DefendantId)
.Select(joined => joined.Product);
答案 1 :(得分:1)
这种方式应该有效,
var productsVM = products
.Join(context.ProductDefendant,
p => p.Id,
pd => pd.ProductId,
(p, pd) => new { Product = p, ProductDefendant = pd })
.Where(joined => joined.ProductDefendant.DefendantId == input.DefendantId)
.Select(joined => new GetProductsReturnViewModel
{
Id = joined.Product.Id,
ProductName = joined.Product.ProductName,
DefendantCode = joined.ProductDefendant.Defendant.DefendantCode
});