4

我有一个对象 IQueryable,我正在尝试动态添加 Where 子句,这对于列表对象上的列非常有用,但是现在有条件地我想将一个 IN 子句添加到具有列 ListingID、AmenityID 的导航属性 (ListingAmenities)

我有可能包含我喜欢过滤结果的设施的 critiera.AmenityIDs。

如果我的数组中有任何 amenityID,我正在尝试实现以下目标

select * from Listings l inner join ListingAmenities a on l.ListingID = a.ListingID where a.AmenityID IN(1,2,3)

这是我的代码(我使用的是 EF5)

if (criteria.AmenityIDs.Count > 0)
        {
            listings = listings.Where(x => x.ListingAmenities.Any(y => y.AmenityID == criteria.AmenityIDs));
        }

这当然行不通。重要说明是我正在动态添加这些 WHERE 子句,这就是我构建 IQueryable 对象的原因

4

1 回答 1

1

Enumerable.Contains转换为INSQL,因此您可以使用:

if (criteria.AmenityIDs.Count > 0)
{
    listings = listings.Where(x => x.ListingAmenities
        .Any(y => criteria.AmenityIDs.Contains(y.AmenityID)));
}

AmenityIDs如果集合很长,请小心,因为大型集合Contains存在性能问题。但是100个左右的元素应该不是问题。

于 2012-11-03T19:51:17.283 回答