【问题标题】:LINQ: Select data from a single column in IQueryable<>LINQ:从 IQueryable<> 中的单个列中选择数据
【发布时间】:2009-03-30 23:07:45
【问题描述】:

我有一个需要从中提取数据的表,并希望丢弃数据来自的两列之一。在我的数据库中,我有“ObjectID (PK)”和“ObjectName”。

我希望使用这些数据来填充 ASP.NET MVC 项目中的 SelectList,因此我的代码中有一个 IQueryable 对象,如下所示:

public IQueryable<objectRef> FindSomeObject()
{
    return from myObj in db.TableName
        orderby myObj.colName
        select myObj;
}

如果我尝试更改最后一行以仅提取一列数据,例如:

select new { myObject.colName };

我收到一条警告,提示我正在尝试将匿名类型隐式转换为当前类型。

令人烦恼的是,此查询在 ViewData[""] 中用于设置 SelectList,它可以很好地显示下拉列表,但会将 PK 值写入新表而不是文本。

我假设我对此知之甚少,以至于我什至无法向 Google 提出正确的问题,因为数小时的 RTFM 没有发现任何有用的信息。任何帮助将不胜感激。

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    您需要更改方法的返回类型 - 如果您只想选择一列,只需声明您将返回该列的某些内容。例如:

    public IQueryable<string> FindSomeObject()
    {
        return from myObj in db.TableName
            orderby myObj.colName
            select myObj.colName;
    }
    

    这基本上说它是一个返回字符串序列的查询 - 我假设这是你想要的。

    【讨论】:

      【解决方案2】:

      使用 colName 的类型,如:

      public IQueryable<string> FindSomeObject()
      {
          return from myObj in db.TableName
              orderby myObj.colName
              select myObj.colName;
      }
      

      【讨论】:

        【解决方案3】:

        你试过了吗:

        public IQueryable<objectRef> FindSomeObject()  
        {
            return from myObj in db.TableName
                orderby myObj.colName
                select myObj.colName;
        }
        

        顺便问一下,你有一个名为 objectRef 的类,以小写字母开头吗?开头应该有一个大写字母(它必须是 colName 的任何类型)。

        【讨论】:

        • @Jon Skeet、Freddy Rios 和 Earwicker 感谢您的回复,并为我指明了正确的方向。一切都按预期工作。 @Earwicker:我的实际代码比我提供的示例要好。我仍然发现自己经常使用 Perl 风格的语法 ;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多