2012-07-04 9 views
8

私は文字列サービス名を返すsqlクエリを行います。これはクエリです:IQueryable <string>を文字列に変換するにはどうすればよいですか?

IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes 
          where (Comp.GroupID == groupID) 
          select Comp.Name; 

クエリから文字列を取得するにはどうすればよいですか?

+0

1つの応答しか期待していない場合は、なぜIQueryable として応答を宣言していますか?複数の文字列はエラーと見なされますか?複数の応答を期待している場合は、配列に変換します。そうでない場合は、クエリで明示的に指定し、単一の文字列を返すように変更します。 – Lazarus

+0

imは結果として1つの文字列を得ることを期待しています – thechmodmaster

+0

しかし、私がするとき:StringName = ServiceGroupdb.ServiceGroupesのCompから(Comp.GroupID == groupID)Comp.Nameを選択します。 – thechmodmaster

答えて

31

LINQは常にシーケンスを返します。そのため、LINQはシーケンスを返します。結果が1つしかないことがわかっている場合は、Single()を使用してその項目を取得します。

var item = (from Comp in ServiceGroupdb.ServiceGroupes 
      where (Comp.GroupID == groupID) 
      select Comp.Name).Single(); 

シーケンスのうち単一の項目を取得するための4つのLINQの方法があります

  • Single()が0またはシーケンスの複数の項目がある場合は例外をスローし、アイテムを返しますが。
  • SingleOrDefault()は、項目、またはデフォルト値(の場合はnull)を返します。シーケンス内に複数の項目がある場合はスローします。
  • First()は、最初の項目を返します。シーケンス内に0個の項目がある場合はスローされます。アイテムがない場合
  • FirstOrDefault()は、あなたがquery.First()を使用することができ、
+0

私の解決策で動作することを確認できます。ありがとうございました! – JPK

7

は、クエリの最初の要素を取得するには)最初の項目、またはデフォルト値を返しますが、要素がない場合、それは例外をスローします。代わりに、query.FirstOrDefault()を使用して、最初の文字列、またはデフォルト値(null)を指定できます。したがって、クエリではこれはうまくいくでしょう:

var myString = (from Comp in ServiceGroupdb.ServiceGroupes 
       where Comp.GroupID == groupID 
       select Comp.Name) 
       .FirstOrDefault(); 
5

あなたはほぼあります。

ちょうど

IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes where (Comp.GroupID == groupID) select Comp.Name; 
// Loop over all the returned strings 
foreach(var s in query) 
{ 
    Console.WriteLine(s); 
} 

をするか、またはあなたが唯一の結果を得ることができますように述べたようにquery.FirstOrDefault()を使用しています。

1

私はここにそれが行く、methods'wayがきれいと明確です見つける:

string query = ServiceGroupdb.ServiceGroupes 
       .Where(Comp => Comp.GroupID == groupID) 
       .Select(Comp => Comp.Name) 
       .FirstOrDefault(); 
-1

はちょうどこのようにそれを行います。

クエリに結果が含まれます。

+0

これは答えではなく、別のスタイルの同じコード –

+0

彼は別のスタイルを使う必要はありません。彼のクエリは文字列を生成し、この変数はその変数を格納します。彼が言ったことを慎重に読むことができれば。 "文字列 - サービス名を返します"。したがって、foreachループは必要ありません。これは1つの値に過ぎないためです。 –

+1

where節はIQueryableを返します... OPのコードとの違いは、varの使用法です – Alex

関連する問題