3

重複
の可能性:クエリ結果を複数回列挙することはできませんか?

エンティティフレームワークを使用して、ストアドプロシージャを使用して、データベースからエンティティのグループを選択して返します。

var results = dataContext.loadData(testargument);

この返されたセットをカウントしたいと思います(1つのレコードのみが返されることを確認してから、このリストの最初の項目を取得します。

if(results.Count() == 1)
{
    ReturnedEntity entity = results.First();
}

ただし、この呼び出しを行うと、「クエリの結果を複数回列挙することはできません」というエラーが表示されます。誰かが私がこれを正しく行う方法を知っていますか?Count()メソッドを呼び出すとデータが変更されると思いますが、first()メソッドを呼び出す前にデータをリストに戻す必要があるかどうかはわかりません。results.ToList()。First()を試しましたが、同じエラーが発生します。

さらに、空のセットでFirst()メソッドを呼び出すとエラーが発生することに気付きました。そのため、返されるレコードが1つだけであることを確認しようとしています。

4

6 に答える 6

3

を使用してこの問題を回避できますToList()。リストをメモリにロードすると、好きなことを実行できるようになります。ただし、を使用することをお勧めしますFirstOrDefault()

var results = dataContext.loadData(testargument).ToList();

ReturnedEntity entity = results.FirstOrDefault();

または

if(results.Length == 1)
    ReturnedEntity entity = results.First();
于 2012-04-23T18:14:20.117 に答える
0

ReturnedEntityエンティティ=results.First();

if(entity!= null)

于 2012-04-23T16:13:15.023 に答える
0

カウントを取得する前に電話してみてください.ToList()。これにより、結果も列挙されます。

var resultList = results.ToList();
if(resultList.Count == 1)
{
    ReturnedEntity entity = resultList.First();
}
于 2012-04-23T16:13:32.060 に答える
0
var resultList = results.ToList();
if(resultList.Count == 1)
{
    ReturnedEntity entity = resultList.First();
}
于 2012-04-23T16:15:26.043 に答える
0

IEnumerableこれをサポートしていません。これは仕様によるものです。IEnumerable遅延評価を使用して、必要になる直前に必要な要素を取得します。

繰り返し使用せずにアイテムの数を知りたい場合IList<T>は、Countプロパティがあります。

于 2012-04-23T18:17:30.710 に答える
-1

私はそれを思います

try
{
    var result = dataContext.loadData(testargument).Single()
}
catch (InvalidOperationException)
{
    // Oops not a single result
}

1つより多いまたは少ない結果を得ることが例外的である場合は、より良いアプローチです。通常の実行で複数または少数の結果が発生する場合は、次のことができます。

var result = dataContext.loadData(testargument).SingleOrDefault()

if (result != null)
{
    // Continue as usual
}
else
{
   // Oops, not a single result
}

ToList拡張機能を使用できるセットを繰り返し使用する場合は、

var results = dataContext.loadData(testargument).ToList(); 

if(results.Count == 1) 
{     
    ReturnedEntity entity = results[0];
}
else
{
    // Oops, not a single result
}

IList複数の列挙をサポートし、Countプロパティとインデックスアクセサーがありますが、IEnumerableありません。

于 2012-04-23T16:14:08.707 に答える