我做了一个sql查询,它返回一个字符串 - 服务名称。这是查询:
IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes
where (Comp.GroupID == groupID)
select Comp.Name;
如何从查询中获取字符串?
答案 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;
查询将包含您的结果。