是否有相当于IN的lambda?我想选择ID为4,5或6的所有资金。一种写作方式是:
列出fundHistoricalPrices = lionContext.FundHistoricalPrices.Where(fhp => fhp.Fund.FundId == 5 || fhp.Fund.FundId == 6 || fhp.Fund.FundId == 7).ToList();
然而,如果我需要它来匹配100个不同的fundIds,那很快就会变得无法管理。我可以这样做:
列表 fundHistoricalPrices = lionContext.FundHistoricalPrices.Where(FHP => fhp.Fund.FundId in(5,6,7))。ToList();
答案 0 :(得分:1)
这是沿着这些方向的某个方面,但我不太同意你采取的方法。但如果您真的想这样做,这将会做到:
.Where(fhp => new List<int>{5,6,7}.Contains( fhp.Fund.FundId )).ToList();
您可能希望在LINQ查询之前构建ID列表...
答案 1 :(得分:0)
您可以对集合使用Contains()方法来获得等效于in
的内容。
var fundIds = new [] { 5, 6, 7 };
var fundHistoricalPrices = lionContext.FundHistoricalPrices.Where(fhp => fundIds.Contains(fhp.Fund.FundId)).ToList();
答案 2 :(得分:0)
您可以编写如下的扩展方法:
public static bool In<T>(this T source, params T[] list)
{
if(null==source) throw new ArgumentNullException("source");
return list.Contains(source);
}
然后:
List fundHistoricalPrices = lionContext.FundHistoricalPrices.Where(fhp => fhp.Fund.FundId.In(5,6,7)).ToList();
答案 3 :(得分:0)
不,我所知道的唯一类似的运算符是Contains()函数。
另一个是使用LINQkit中的谓词构建器动态构造查询:http://www.albahari.com/nutshell/predicatebuilder.aspx
示例强>
int[] fundIds = new int[] { 5,6,7};
var predicate = PredicateBuilder.False<FundHistoricalPrice>();
foreach (int id in fundIds)
{
int tmp = id;
predicate = predicate.Or (fhp => fhp.Fund.FundId == tmp);
}
var query = lionContext.FundHistoricalPrices.Where (predicate);