Linq使用谓词不起作用

时间:2013-04-29 09:34:48

标签: asp.net linq

我创建了一个小型测试类,它从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 ...的定义”

任何想法我做错了什么?

*更新*

这似乎与谓词有关 - 。否则就是可用的。

3 个答案:

答案 0 :(得分:5)

没有扩展方法Where扩展IEnumerable<T>并采用Expression<Func<T, bool>>类型的参数。

您有两种选择:

  1. 如果您希望将参数IQueryable<Lender>保持为{{1},请使用IEnumerable<Lender>代替.AsQueryable()(只需拨打predicate即可轻松实现) }}

  2. 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()命令上执行。我想这可以归结为您对功能的期望,以及这是否可以满足您的需求。