如何将IQueryable <string>转换为字符串?</string>

时间:2012-07-04 09:41:48

标签: c# .net linq iqueryable

我做了一个sql查询,它返回一个字符串 - 服务名称。这是查询:

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

如何从查询中获取字符串?

5 个答案:

答案 0 :(得分:38)

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

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

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

  • Single()返回该项,如果序列中有0个或多个项,则抛出异常。
  • SingleOrDefault()会返回该项,或默认值(null的{​​{1}})。如果序列中有多个项目,则抛出。
  • string返回第一项。如果序列中有0个项目,则抛出。
  • First()返回第一项,如果没有项目则返回默认值

答案 1 :(得分:7)

要获取查询中的第一个元素,可以使用query.First()但如果没有元素,则会引发异常。相反,您可以使用query.FirstOrDefault()来提供第一个字符串或默认值(null)。因此,对于您的查询,这将起作用:

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

答案 2 :(得分: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(),因为您只能得到一个结果。

答案 3 :(得分:1)

我觉得这些方法更漂亮,更清晰,所以在这里:

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

答案 4 :(得分:-1)

就这样做;

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

查询将包含您的结果。