16

I do a sql query which returns a string - service name. this is the query:

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

How do i get the string out of the query?

4

5 回答 5

46

LINQ 总是返回一个序列,因此您必须从中检索项目。如果您知道您将只有一个结果,请使用Single()检索该项目。

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

有四种 LINQ 方法可以从序列中检索单个项目:

  • Single()返回项目,如果序列中有 0 个或多个项目,则引发异常。
  • SingleOrDefault()返回项目或默认值 ( nullfor string)。如果序列中有多个项目,则抛出。
  • First()返回第一项。如果序列中有 0 个项目,则抛出。
  • FirstOrDefault()返回第一个项目,如果没有项目则返回默认值)
于 2012-07-04T09:43:15.603 回答
7

要获取查询中的第一个元素,您可以使用query.First(),但如果没有元素,则会引发异常。相反,您可以使用query.FirstOrDefault()which 将为您提供第一个字符串或默认值 ( 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()如前所述使用,因为您只会得到一个结果。

于 2012-07-04T09:44:16.300 回答
1

我发现methods'way更漂亮更清晰,所以这里是:

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 回答