私は式ツリーに慣れようとしています。私は壁に当たっています。 LINQ to XMLクエリを動的に作成できるようにするため、Expression Treesに慣れようとしています。私は動的に生成することができるようにしたいXML文の簡単なLINQを開始しました:式ツリーを使用したLINQ動的クエリ
// sample data
var sampleData = new XElement("Items",
new XElement("Item", new XAttribute("ID", 1)),
new XElement("Item", new XAttribute("ID", 2)),
new XElement("Item", new XAttribute("ID", 3))
);
// simple example using LINQ to XML (hard-coded)
var resultsStatic = from item in sampleData.Elements("Item")
where item.Attribute("ID").Value == "2"
select item;
// trying to recreate the above dynamically using expression trees
IQueryable<XElement> queryableData = sampleData.Elements("Item").AsQueryable<XElement>();
ParameterExpression alias = Expression.Parameter(typeof(XElement), "item");
MethodInfo attributeMethod = typeof(XElement).GetMethod("Attribute", new Type[] { typeof(XName) });
PropertyInfo valueProperty = typeof(XAttribute).GetProperty("Value");
ParameterExpression attributeParam = Expression.Parameter(typeof(XName), "ID");
Expression methodCall = Expression.Call(alias, attributeMethod, new Expression[] { attributeParam });
Expression propertyAccessor = Expression.Property(methodCall, valueProperty);
Expression right = Expression.Constant("2");
Expression equalityComparison = Expression.Equal(propertyAccessor, right);
var resultsDynamic = queryableData.Provider.CreateQuery(equalityComparison);
からCreateQueryを呼び出すときに私が手にエラーが「引数の式が有効ではありません」です。 equalityComparisonのデバッグビューには、 '(.Call $ item.Attribute($ ID))。Value == "2"'が表示されます。誰かが私が間違ってやっていることを特定できますか?
ありがとうございました!これは完全に動作します! – DMC