LINQ加入条件

时间:2015-05-13 15:33:32

标签: asp.net-mvc linq entity-framework lambda

我可以使用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")。将此追加到结尾是指新对象。

3 个答案:

答案 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,
    ...