文字列(サービス名)を返すSQLクエリを実行します。これはクエリです:
IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes
where (Comp.GroupID == groupID)
select Comp.Name;
クエリから文字列を取得するにはどうすればよいですか?
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()
は最初の項目を返します。項目がない場合はデフォルト値を返します)クエリの最初の要素を取得するには、query.First()
を使用できますが、要素がない場合は例外がスローされます。代わりに、query.FirstOrDefault()
を使用して、最初の文字列またはデフォルト値(null
)を取得できます。したがって、クエリの場合、これは機能します。
var myString = (from Comp in ServiceGroupdb.ServiceGroupes
where Comp.GroupID == groupID
select Comp.Name)
.FirstOrDefault();
もうすぐです。
ただやる
_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()
を使用します。
私は方法がよりきれいでより明確であると思うので、ここに行きます:
string query = ServiceGroupdb.ServiceGroupes
.Where(Comp => Comp.GroupID == groupID)
.Select(Comp => Comp.Name)
.FirstOrDefault();