0

我创建了一个小型测试类,它从 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(predicate)”部分给出错误 - 消息是“...不包含 Where... 的定义”

任何想法我做错了什么?

* 更新 *

这似乎与谓词有关 - .Where 是可用的。

4

3 回答 3

5

没有扩展方法Where可以扩展IEnumerable<T>并采用 type 的参数Expression<Func<T, bool>>

你有两个选择:

  1. 如果IQueryable<Lender>IEnumerable<Lender>.AsQueryable()将参数保留predicateExpression<Func<Lender, bool>>

  2. 使用类型而Func<Lender, bool>不是参数。由于您是从文件中加载数据,因此使用.Expression<Func<Lender, bool>>predicateIQueryableIEnumerable

于 2013-04-29T09:45:20.560 回答
0

它抱怨任何类型lenders都没有.Where方法。这是因为:

  • 你没有包括using System.Linq;
  • 的类型lenders不是一个IEnumerable或类似的。
于 2013-04-29T09:37:05.903 回答
0

代替:

lenders.Where(predicate)

和:

lenders.ToList().Where(predicate)

两者都应该可以返回IEnumerable

这样做的主要缺点是查询将在.ToList()命令上执行。我想这取决于您期望您的功能做什么,以及这是否可以满足您的需求。

于 2013-04-29T09:49:31.310 回答