我可以使用LINQ加入Lambda符号没问题,但我无法弄清楚如何添加where
条件。
var q = query.Join(context.CustomerIds,
x => x.CustomerId,
y => y.CustomerId,
(x, y) => new CustomerLookupResult()
{
dob = x.DateOfBirth.ToString(),
forenames = x.Forenames,
surname = x.Surname,
loyaltyNo = y.Identifier,
customerId = x.CustomerId
});
我加入第一个的表格在其loyaltyNo
列中包含Identifier
,但也包含同一列中的其他信息,因此使用第二列IdentifierTypeCode
允许过滤。
那么我现在如何像在SQL中一样添加.Where(x => x.IdentifierTypeCode == "LOYALTY")
。将此追加到结尾是指新对象。
答案 0 :(得分:2)
您可以在加入之前应用Where
。
var q = customerLoyalties
.Where(x => x.IdentifierTypeCode == "LOYALTY")
.Join(customers,
x => x.CustomerId,
y => y.CustomerId,
(x, y) => new CustomerLookupResult()
{
CustomerId = y.CustomerId,
Name = y.Name,
IdentifierTypeCode = x.IdentifierTypeCode
});
答案 1 :(得分:2)
您也可以使用这种方式来实现使用Linq。
var match = from t1 in context.orders
join t2 in context.orderdetails on
new { t1.OrderID } equals
new { t2.OrderID }
join t3 in context.products on
new { t2.ProductID } equals
new { t3.ProductID }
where t3.ProductID == id
select t3;
return match.ToList();
答案 2 :(得分:1)
Join的第一个参数接受任何IEnumerable,因此您可以在此时或之前应用Where
var q = query.Join(context.CustomerIds.Where(x=>x.IdentifierTypeCode=="LOYALTY"),
x => x.CustomerId,
y => y.CustomerId,
(x, y) => new CustomerLookupResult()
{
dob = x.DateOfBirth.ToString(),
forenames = x.Forenames,
surname = x.Surname,
loyaltyNo = y.Identifier,
customerId = x.CustomerId
});
或者,如果你不喜欢在一行上放太多:
var filteredLoyalties = context.CustomerIds.Where(x=>x.IdentifierTypeCode=="LOYALTY");
var q = query.Join(filteredLoyalties,
...