我创建了一个小型测试类,它从xml文件中返回数据。
我现在想要使用linq使其更具动态性,但无法使其工作。
public class LenderCollection
{
string fileName = "C:\\Lenders.xml";
public IEnumerable<Lender> Lenders { get; set; }
public void FetchLenders(Expression<Func<Lender, bool>> predicate = null)
{
IEnumerable<Lender> lenders = XmlHelper.GetObjectFromXml<List<Lender>>(fileName, "AllLenders");
Lenders = predicate.IsNotNull() ? lenders.Where(predicate) : lenders;
}
}
Visual Studio在“lenders.Where(谓词)”部分给出错误 - 消息为“...不包含Where ...的定义”
任何想法我做错了什么?
*更新*
这似乎与谓词有关 - 。否则就是可用的。
答案 0 :(得分:5)
没有扩展方法Where
扩展IEnumerable<T>
并采用Expression<Func<T, bool>>
类型的参数。
您有两种选择:
如果您希望将参数IQueryable<Lender>
保持为{{1},请使用IEnumerable<Lender>
代替.AsQueryable()
(只需拨打predicate
即可轻松实现) }}
对Expression<Func<Lender, bool>>
参数使用Func<Lender, bool>
类型而不是Expression<Func<Lender, bool>>
。由于您是从文件加载数据,因此使用predicate
而不是IQueryable
是没有意义的。
答案 1 :(得分:0)
抱怨任何类型lenders
都没有.Where
方法。这可能是因为:
using System.Linq;
lenders
的类型不是IEnumerable
或类似。答案 2 :(得分:0)
替换:
lenders.Where(predicate)
使用:
lenders.ToList().Where(predicate)
两者都应该能够返回IEnumerable
。
主要的缺点是查询将在.ToList()
命令上执行。我想这可以归结为您对功能的期望,以及这是否可以满足您的需求。