3

同様のオブジェクトのリストがあります。このリストのオブジェクトはすべて、名前付きのプロパティと名前付きNameの列挙型を持っていますMk2Resultが、列挙型Mk2TestResultです。

ここで、forループ内で、現在のイテレータ整数がオブジェクトの名前としてリストに存在するかどうかを確認します。

for(......
{
//    
    var query = 
        from pin in _pins 
        where pin.Name == i.ToString() 
        select pin.Mk2Result;

    Mk2TestResult result = (Mk2TestResult)query;

    //Do some more stuff
}

しかし、コンパイラは次のメッセージで文句を言います。

Cannot convert type 'System.Collections.Generic.IEnumerable<DataModels.Mk2TestResult>' to 'DataModels.Mk2TestResult'

クエリ結果を列挙型として正しく返す方法は?

4

7 に答える 7

2

試す

Mk2TestResult result = (Mk2TestResult)query.FirstOrDefault();

リストを1つのオブジェクトにキャストしようとしているためです。ただし、最初のオブジェクトしか取得できません。FirstOrDefault 関数パラメーター内で関数を使用して、必要なオブジェクトを取得できます。

于 2012-08-14T13:16:50.077 に答える
1

Mk2TestResult オブジェクトのコレクションを 1 つだけにキャストしようとしている場合は、FirstOrDefault を取得するか、IEnumerable にキャストします。

于 2012-08-14T13:18:46.543 に答える
1

あなたのクエリは実際にあなたのEnumタイプのコレクションを返します。1 つの結果だけが必要な場合は、、、、または拡張メソッドを使用する必要Singleがあります SingleOrDefaultFirstFirstOrDefault

注:クエリが結果を返さない可能性があると思われる場合は、OrDefaultという名前のメソッドを使用してください。空の結果セットは、Singleまたはを呼び出すときに例外を引き起こしFirstます。

var query = 
    from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result;

// If pin.Mk2Result is strongly typed, the cast is not necessary
Mk2TestResult result = query.FirstOrDefault();
于 2012-08-14T13:19:29.250 に答える
1

クエリの結果は、要素のコレクションであり、単一の要素ではありません。それがコンパイラがあなたに言おうとしていることです。このコレクションから最初の値を取得する場合は、Enumerable.First Methodを使用する必要があります。の重ね合わせが必要な場合は、 Enumerable.Aggregate MethodMk2TestResultを使用できます。または、コレクションを単純に繰り返し処理し、具体的な値に基づいて何らかのアクションを実行することもできます。Mk2TestResult

于 2012-08-14T13:17:31.210 に答える
0

返される Type は Mk2TestResul のコレクションであるため、List または Array または IEnumerable を実装するものに格納する必要があります。

例:

List<Mk2TestResult> result = query.ToList();
于 2012-08-14T13:17:57.580 に答える
0

Linq は IEnumerable を返すため、それを反復処理する必要があります。

var query = 
    (from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result).ToList();

foreach(var result in query)
  ...
于 2012-08-14T13:17:45.227 に答える
-1

新しい列挙型を Dynamic linq に追加するには、次のコードを追加する必要があります。

typeof(Enum),
typeof(T)

T : Enum Type.

dynamic の definedTypes プロパティに。

それは私のための仕事です

于 2013-03-22T13:15:34.180 に答える