Linq使用谓词不起作用

dot*_*oob 0 linq asp.net

我创建了一个小测试类,它返回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;

    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio在"lenders.Where(谓词)"部分给出错误 - 消息是"...不包含Where ...的定义"

我有什么想法我做错了吗?

*更新*

它似乎与谓词有关 - .否则就是可用的.

slo*_*oth 5

没有扩展方法Where可以扩展IEnumerable<T>并获取类型参数Expression<Func<T, bool>>.

您有两种选择:

  1. 如果你想保持参数为,那么使用an IQueryable<Lender>代替IEnumerable<Lender>(你只需通过调用即可.AsQueryable())predicateExpression<Func<Lender, bool>>

  2. 使用的类型Func<Lender, bool>,而不是Expression<Func<Lender, bool>>predicate参数.由于您是从文件加载数据,因此使用IQueryableover 文件是没有意义的IEnumerable.