私はモックデータの値を持つXElementを持っています。
私はxmlを照会する式を持っています:
Expression<Func<XElement, bool>> simpleXmlFunction =
b => int.Parse(b.Element("FooId").Value) == 12;
で使われる:
var simpleXml = xml.Elements("Foo").Where(simpleXmlFunction).First();
設計時のエラーは次のとおりです。
メソッド 'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable、System.Func)'の型引数は、その使用から推論できません。型引数を明示的に '
Whereに渡された代理人がXElementを取り込み、boolを返す必要があります。アイテムがクエリと一致する場合、デリゲートまたはwhere句を追加する方法がわかりません。
また、Entity Frameworkに対する実際の関数の並列方法にはこの問題はありません。 LINQとXMLのバージョンが正しくない点は何ですか?
simpleXmlFunctionを式<Func <XElement、bool >>にしないでください。それをFunc <XElement、bool>にします。これは、.Whereの代議員として期待されるものです。
Func<XElement, bool> simpleXmlFunction =
new Func<XElement, bool>(b => int.Parse(b.Element("FooId").Value) == 12);
私は完全な答えは、前の答え、デイビッドモートンのコメント、および更新されたコードスニペットが含まれていると思う:
IQueryableの実装はIEnumerableの.Where実装とは異なります。 IEnumerable.Whereが期待するもの:
Func<XElement, bool> predicate
実行している式から関数をコンパイルすることができます:
Expression<Func<XElement, bool>> simpleXmlExpression =
b => int.Parse(b.Element("FooId").Value) == 12;
Func<XElement, bool> simpleXmlFunction = simpleXmlExpression.Compile();
var simpleXml = xml.Elements("Foo").Where(simpleXmlFunction).First();
これにより、生成された式ツリーを見て、コンパイルされたフォームを使用してxmlコレクションを照会することができます。