web-dev-qa-db-ja.com

IQueryable <string>を文字列に変換するにはどうすればよいですか?

文字列(サービス名)を返すSQLクエリを実行します。これはクエリです:

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

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

13
thechmodmaster

LINQは常にシーケンスを返すため、そこからアイテムを取得する必要があります。結果が1つしかないことがわかっている場合は、Single()を使用してそのアイテムを取得します。

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

シーケンスから単一のアイテムを取得するには、4つのLINQメソッドがあります。

  • Single()はアイテムを返し、シーケンスに0個または複数のアイテムがある場合は例外をスローします。
  • SingleOrDefault()は、アイテムまたはデフォルト値(nullの場合はstring)を返します。シーケンス内に複数のアイテムがある場合にスローします。
  • First()は最初の項目を返します。シーケンスに0個のアイテムがある場合にスローします。
  • FirstOrDefault()は最初の項目を返します。項目がない場合はデフォルト値を返します)
40
Anders Abel

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

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

もうすぐです。

ただやる

_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);
}
_

または、1つの結果しか得られないため、前述のようにquery.FirstOrDefault()を使用します。

6
Davio

私は方法がよりきれいでより明確であると思うので、ここに行きます:

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