このような動的なLinqクエリがあります。結果セットを配列に変換する必要があります。しかし、IQueryable型を配列に変換できません。なにか提案を?
私のコード:-
var query = Data.AsEnumerable()
.AsQueryable()
.Select("new(it[\"Country\"] as Country)", "it")
.Take(10);
foreach (string str in query) // **getting error Unable to cast object of type 'DynamicClass1' to type 'System.String**
{
}
次のようにして修正しました:-foreach(var str in query)。
しかし、今、別の問題があります。 where条件をクエリに追加しました。現在、「DataRow」タイプに「Country」のプロパティまたはフィールドは存在しません 」というエラーが発生しています。以下は私のクエリです
var query= Data.AsEnumerable().AsQueryable().Where("Country = @0", "London").Select("new (Country as Country)");
Dynamic LINQ
を使用すると、すべての拡張機能がdynamic
要素を含むコレクションを返すため、たとえば次のようにコードを変更する必要があります
foreach (dynamic str in query)
{
....
}
また、あなたの場合、 str
はフィールドCountry
オブジェクトです
更新
コメントからの質問
AsEnumerable
またはAsQueryable
を呼び出すときにDataがDataTable
場合は、 DataRow
コレクションを操作するため、列の値でフィルタリングする場合は、このようなDataRow
構文を使用する必要があります。
Data.AsQueryable().Where("it[\"Country\"] = @0", "London")
またはあなたは最初にそのように選択することができます
var query= Data.AsQueryable()
.Select("new (it[\"Country\"] as Country)")
.Where("Country = @0", "London")
UPDATE2
フィールドのタイプを指定しない限り、 Object
なる可能性があるため、次のようにSelect
句を変更する必要があります
....
.Select("new(Convert.ToString(it[\"Country\"]) as Country)")
....
この場合、「 Select
後のCountry
フィールドが「 String
になるWhere
を呼び出すと、 String
にContains
メソッドがContains