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... の定義が含まれていません" です。

私が間違っていることはありますか?

* アップデート *

述語 - と関係があるようです。

4

3 に答える 3

5

type のパラメーターをWhere拡張して受け取る拡張メソッドはありません。IEnumerable<T>Expression<Func<T, bool>>

次の 2 つのオプションがあります。

  1. IQueryable<Lender>パラメータを_ IEnumerable<Lender>_ .AsQueryable()_predicateExpression<Func<Lender, bool>>

  2. Func<Lender, bool>パラメータの代わりに型を使用Expression<Func<Lender, bool>>predicateます。ファイルからデータをロードしているIQueryableため、IEnumerable.

于 2013-04-29T09:45:20.560 に答える
0

交換:

lenders.Where(predicate)

と:

lenders.ToList().Where(predicate)

どちらも戻れるはずIEnumerableです。

これの主な欠点は、クエリが.ToList()コマンドで実行されることです。これは、関数が実行することを期待していることと、これがニーズに受け入れられるかどうかにかかっていると思います。

于 2013-04-29T09:49:31.310 に答える