【发布时间】:2011-08-12 21:12:19
【问题描述】:
我需要传入一个“where”lambda 表达式,该表达式将在方法内的 LINQ 查询中使用。问题是,在我进入该方法之前,我不知道将与 where 值进行比较。
现在为了进一步解释和澄清我上面所说的一些内容,我将提出一个人为的例子。
假设我有一个 List<Products>,我需要使用 Products 对象的 productId 属性将该列表缩小到一条记录。通常我会这样做:
var product = productList.Where(p=>p.productId == 123).FirstOrDefault();
现在更进一步——我需要将上述逻辑放入一个不限于List<Products> 而是List<T> 的方法中,所以理想情况下,我会这样称呼它(并且我知道下面的行不通,它只是在这里展示我想要实现的目标):
myMethod(productList, p => p.productId == X)
需要注意的是,X 在我进入方法之前是未知的。
最后,就其价值而言,我需要指出我的数据集合是 OData DataServiceQuery。
所以,重新总结一下我的问题:我需要知道如何构造一个可以传递给方法的 lambda“where”表达式,以及如何将它用于 LINQ 查询中的对象集合。
【问题讨论】:
-
T 总是有 productId 属性?
-
不,productId 并不总是属性。有时我可能有一个用户列表,所以它可能是 UserId,或者可能是一组 Company 对象的 companyId。