.Select(string selectors)
.NET 4.5 で動的 LINQ からの結果を列挙する方法を理解しようとしています。動的 linq はSystem.Linq.Dynamic
名前空間から取得されます。
編集:私も含めてSystem.Linq
います。
次のようなメソッドがあります。
public void SetAaData(List<T> data, List<string> fields)
{
if (data == null || data.Count == 0)
{
return;
}
var dynamicObject = data.AsQueryable().Select("new (" + string.Join(", ", fields) + ")");
_aaData = dynamicObject;
}
コードをステップ実行すると、それを調べdynamicObject
て列挙し、結果 (正しい) を表示できます。問題は、単体テストをパスさせようとしているのに、dynamicObject で何もアクセスできないことです。_aaData
フィールドは type として定義されますdynamic
。
私のテスト方法では、これを試しました:
var hasDynamicProperties = new MyClass<MyType>();
dgr.SetAaData(data, fields); // data is a List<MyType>
Assert.IsTrue(hasDynamicProperties.AaData.Count > 0);
このテストを実行すると、次のエラーが表示されます。
MyTestingClass threw exception:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Linq.EnumerableQuery<DynamicClass1>' does not contain a definition for 'Count'
だから、私はそれをリストにキャストしようとしました:
Assert.IsTrue(dgr.AaData.ToList().Count() > 0);
次のエラーが発生しました。
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Linq.EnumerableQuery<DynamicClass1>' does not contain a definition for 'ToList'
それで、System.Linq.EnumerableQuery<T>
ここで調べました:http://msdn.microsoft.com/en-us/library/cc190116.aspx。有効な拡張メソッドであると思われるものはすべて表示.Count()
されますが、試してみると機能しません。実際、そのページのメソッドを試してみると、どれも機能しません。
私は何を間違っていますか?