2011-10-19 4 views
28

IQueryable結果に値がないかどうかを確認する最良の方法を知りたいだけです。IQueryable結果セットがnullであることを確認する最良の方法は

例えば、我々は

public static IQueryable<Table> DisplayAll() 
{ 
    var db = new DataContext(); 
    var list= from data in db.Table select data; 
    return list; 
} 

ようなメソッドを持っているし、我々は持っているコンテンツかどうか、結果セットをチェックするために、任意の可能な方法この

var list = DisplayAll(); 
if(list != null) 
{ 
    //do something --- in here even if the result set has no values it will 
    // go to this line. It just say `enumeration yielded no results` 
} 

ような何かを行う場合は?

おかげ

答えて

62

list LINQとnullになることはありません。必要に応じて「空のコレクション」を表します。テストへの道はAny拡張メソッドを使用することです:のIQueryableは何の結果をyeildsない場合

if (list.Any()) { 
    // list has at least one item 
} 
+0

十分に簡単。 –

+0

ありがとうございますToList()非常に高価になる可能性があります。 –

+3

@HenkHolterman:なぜですか?この特別な例では 'Any()'は 'SELECT COUNT(*)... 'となり、整数の比較を行うことになるでしょう。結果セットを列挙し始めるというばかげたルートになっても、どのようにToListが速くなるでしょうか? – Jon

1

例外がスローされます。私は以下を使用します:

using System.Data.Entity; //for Async support in EF 
var tQ = await _tableRepository.DisplayAll(); 
try { return await tQ.ToListAsync(); } 
catch { return null; } 

例外をトラップしてnullを返します。ご希望の場合は、空のリストは、ここで

catch { return new List<Table>(); } 
-2

は私のためにどのような作品です:

public IQueryable SomeFunc() 
    { 
     IQueryable result = Repo.SomeLinqQuery(); 
     if (result.GetEnumerator().MoveNext() == false) 
     { 
      throw new Exception("Results empty"); 
     } 
     return result; 
    } 
+1

なぜあなたは本当にこれを行う必要がありますか? –

+1

脳のマスターベーション;)それは単純な問題を複雑にすることができるかどうかは魅力的です。 – Jerther

+1

この部分は良いです:result.GetEnumerator()。MoveNext()== false – cfnerd

関連する問題