【问题标题】:Sort a LINQ with another LINQ in MVC在 MVC 中使用另一个 LINQ 对 LINQ 进行排序
【发布时间】:2015-06-15 21:50:09
【问题描述】:
  • 使用 SQL Server 管理
  • 为 Web 使用 MVC VS 2013
  • 处于控制器中

这里 materialnumb 这是一个 总是 只返回一个值的 LINQ 查询。 作为以下...

var materialnumb = (from r in db.MaterialNumber
                                   where r.MaterialNumber == 80254842
                                   select r.MaterialNumber);

我有另一个来自 SQL 视图的 LINQ 查询,该查询涉及具有内部连接语句等的其他几个表(包括前一个表 db.MaterialNumber),如下所示:

var query = (from r in db.SQLViewFinalTable
                                where r.MaterialNumber == Convert.ToInt32(materialnumb.MaterialNumber)
                                select r

我想按从第一个查询中检索到的材料编号对所有材料进行排序,但是当我尝试将查询作为我的视图的模型传递时,它会丢弃以下错误:

LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,这个方法不能翻译 到商店表达式中。

我认为这是因为查询是一个对象,即使它只有一个值,所以它不能转换为单个 Int32。 更何况,它并没有被执行的查询,它只是一个查询……

那么,怎样才能实现我的目标呢?

附加信息:我尝试在“最终”查询之外转换查询。它仍然不起作用。 附加信息:这只是一个例子,真正的查询实际上嵌入了更多其他查询,并且这些其他查询中也有其他查询,所以我需要一种实用的方法。 附加信息:我还尝试将查询转换为字符串,然后再转换为 int。

【问题讨论】:

    标签: sql-server linq entity-framework controller


    【解决方案1】:

    试试这个:

    var materialnumb = (from r in db.MaterialNumber
                        where r.MaterialNumber == 80254842
                        select r.MaterialNumber).FirstOrDefault();
    
    var query = from r in db.SQLViewFinalTable
                where r.MaterialNumber == materialnumb
                select r
    

    但我不明白你为什么要过滤 80254842 并选择相同的值?你可以直接做:

    var query = from r in db.SQLViewFinalTable
                where r.MaterialNumber == 80254842
                select r
    

    【讨论】:

    • 我将数字放在那里,因为在我使用的实际查询中,我会让 materialnumb 合并另一个查询,依此类推。每个后续查询都必须过滤值,因为这就是表格的制作方式,我无法更改。所以我想要一些容易解释的东西。那成功了。谢谢!
    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多