16

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

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

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

4

5 に答える 5

46

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

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

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

  • Single()アイテムを返し、シーケンスに0個または複数のアイテムがある場合は例外をスローします。
  • SingleOrDefault()アイテム、またはデフォルト値(nullstring)を返します。シーケンス内に複数のアイテムがある場合にスローします。
  • First()最初のアイテムを返します。シーケンスに0個のアイテムがある場合にスローします。
  • FirstOrDefault()最初のアイテムを返します。アイテムがない場合はデフォルト値を返します)
于 2012-07-04T09:43:15.603 に答える
7

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

var myString = (from Comp in ServiceGroupdb.ServiceGroupes 
               where Comp.GroupID == groupID
               select Comp.Name)
               .FirstOrDefault();
于 2012-07-04T09:43:38.673 に答える
6

もうすぐです。

ただやる

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つの結果しか得られないため、前述のように使用します。

于 2012-07-04T09:44:16.300 に答える
1

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

string query = ServiceGroupdb.ServiceGroupes
               .Where(Comp => Comp.GroupID == groupID)
               .Select(Comp => Comp.Name)
               .FirstOrDefault();
于 2012-07-04T09:45:42.693 に答える
-1

このようにしてください。

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

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

于 2012-07-04T09:47:18.123 に答える