c# - "linq where"不解析属性?

标签 c#

我有一个 IQueryable (PartHistories),它将返回一组对象。我有一个名为 Phase 的枚举,它改变了查询,就像这样(rc 是一个列表):

            var query = this.PartHistories;
            if ( Phase.Repair == _Phase )
            {
                query = query.Where( ph => ph.RemovedInRepair == false );
            }
            else
            {
                query = query.Where( ph => ph.PartPhaseID != ( int )Phase.Repair );
            }
            rc.AddRange( query
                .ToList( ) );

这有效。

现在,所讨论的对象 (PartHistory) 有一个属性 PartPhase,它将 PartPhaseID 转换为 Phase。但是,此代码不起作用(更改在 Phase.Repair 行中):

            var query = this.PartHistories;
            if ( Phase.Repair == _Phase )
            {
                query = query.Where( ph => ph.RemovedInRepair == false );
            }
            else
            {
                query = query.Where( ph => ph.PartPhase != Phase.Repair );
            }
            rc.AddRange( query
                .ToList( ) );

在 AddRange 处,异常是“不支持成员‘PartPhase’。

最后,以下代码可以工作,但在这种情况下,Where 是 List 的扩展,并且(我认为)在收集完所有 PartHistories 之后应用:

          if( Phase.Repair == _Phase )
          {
              rc.AddRange( this.PartHistories.ToList( )
                  .Where( ph => ph.RemovedInRepair == false ) );
          }
          else
          {
              rc.AddRange( this.PartHistories.ToList( )
                  .Where( ph => ph.PartPhase != Phase.Repair ) );

最佳答案

如果这是 Linq to SQL,那么是的,它不支持自定义方法调用。 它可以将表达式转换为 SQL 查询,但不知道您的属性(property)内部发生了什么。因此,自定义方法和属性不能转换为 SQL。

如果你能做一个Expression<Func<PartHistory, PartPhase>> ,这将执行与您的属性相同的操作(无需调用自定义方法),然后它就可以工作了。

关于c# - "linq where"不解析属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066177/

相关文章:

c# - 如何在 ASP.NET 站点中使用 MySQL 数据库,而无需在开发期间进行连接?

c# - Tesseract OCR Library - 学习字体

c# - 如何将从网站下载的数据转换为正确的编码?

c# - 创建一个正则表达式来检查强密码

c# - 在不同的线程中更新 CollectionView

c# - EF Core 子元素的列表和属性之间的相交返回 "ArgumentNullException"

javascript - 尝试使用 Web api POST txt 文件,收到 415 Unsupported Media Type

c# - 在列表中查找 int 的索引

c# - 根级别的数据无效。第 1 行,位置 1。读取 xml 时

c# - 在 asp.net mvc4 中设置和获取 cookie