【问题标题】:how can I convert IQueryable<string> to string?如何将 IQueryable<string> 转换为字符串?
【发布时间】:2012-07-04 19:16:35
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您只期望一个响应,为什么要将响应声明为 IQueryable?多个字符串是否会被视为错误?如果您期望多个响应,则转换为数组,否则在查询中明确并将其更改为返回单个字符串。
  • 我希望得到一个字符串
  • 但是当我这样做的时候:string name = from Comp in ServiceGroupdb.ServiceGroupes where (Comp.GroupID == groupID) select Comp.Name;
  • 我得到:无法将类型 system.linq.IQueryable 隐式转换为字符串

标签: c# .net linq iqueryable


【解决方案1】:

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

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

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

  • Single() 返回项目,如果序列中有 0 个或多个项目,则抛出异常。
  • SingleOrDefault() 返回项目或默认值(null 代表 string)。如果序列中有多个项目,则抛出。
  • First() 返回第一项。如果序列中有 0 个项目,则抛出。
  • FirstOrDefault() 返回第一项,如果没有项则返回默认值)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你快到了。

      就做吧

      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(),因为你只会得到一个结果。

      【讨论】:

        【解决方案4】:

        我发现方法的方式更漂亮,更清晰,所以在这里:

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

        【讨论】:

          【解决方案5】:

          就这样吧;

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

          查询将包含您的结果。

          【讨论】:

          • 他不需要使用任何不同的风格。他的查询将产生一个字符串,该变量将存储该变量。如果你能仔细阅读他所说的话。 “返回一个字符串 - 服务名称”。所以他不需要任何foreach循环,因为它只有一个值。
          • where 子句返回 IQueryable ...与 OP 代码的唯一区别是 var 的用法
          猜你喜欢
          • 2010-11-05
          • 1970-01-01
          • 2019-12-12
          • 2020-11-22
          • 1970-01-01
          • 1970-01-01
          • 2020-04-23
          • 2020-05-20
          • 2018-12-20
          相关资源
          最近更新 更多