c# - 创建 LINQ to Entities 可以转换的属性

标签 c# .net entity-framework linq-to-entities

我很好奇如何创建可由 LINQ 翻译的属性。下面是一个非常简单的例子。

我有一个表/类 Category,它有一列 ParentId 链接到自身(因此一个类别可以有子类别)

EF 自动生成属性 Category1,这是父类别。

为了清楚起见,我创建了另一个属性

public partial class Category
{
  public Category Parent
  {
    get { return Category1; }
  }
}

问题是,这行得通

var categs = ctx.Categories.Where(x => x.Category1 == null);

但这行不通

var categs = ctx.Categories.Where(x => x.Parent == null);

The specified type member 'Parent' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

有没有什么方法可以在不执行 .ToList() 的情况下创建可翻译的属性(LINQ to SQL)?

编辑:我想避免接触 Model.edmx,因为数据库在开发过程中经常发生变化,并且 .edmx 经常需要重新创建

最佳答案

如果您询问是否可以使用 getter/setter 中的任何 C# 代码创建一个属性,然后让标准 LINQ to Entities 理解它——那么不,这是不可能的。 C# 比 SQL 更具表现力,期望 Entity Framework 充当通用的 C# 到 SQL 转换器是不合理的。

虽然在很多情况下您都可以解决这个问题,请参阅 Using a partial class property inside LINQ statement举个例子。

更新

如果您告诉我们您想要实现的目标会很有帮助,但这里有一个例子:

public partial class Category
{
    public static Expression<Func<Category, bool>> ParentIsNullExpression
    {
        get 
        {
            return c => c.Category1 == null;
        }
    }
}

然后

var categs = ctx.Categories.Where(Category.ParentIsNullExpression);

可以对表达式进行各种操作,EF 支持其中一些操作,因此可以转换为 SQL。

关于c# - 创建 LINQ to Entities 可以转换的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10509019/

相关文章:

c# - 如何将 XmlAttribute 设置为 IsRequired?

c# - 如何将 F# dll 动态加载和卸载到 C# 项目中?

c# - 路由不触发 Asp.Net Core

c# - C# 中的代码效率

.net - 是否有带有数据上下文的 ApplyPropertyChanges?

c# - 为什么我必须在 DataGridViewRow 上调用 Cast<> 扩展方法?

wpf - 与 Entity Framework 绑定(bind)时,组合框的数据模板不会切换所选值

c# - 如何在设计时在窗体上绘画?

.net - DataTable 和 DataSet 现在应该过时了吗?

php - Doctrine,@oneToMany,但只有激活字段