查询 LINQ to Entities 中联系字段的属性
Posted
技术标签:
【中文标题】查询 LINQ to Entities 中联系字段的属性【英文标题】:Property for contacting fields in query LINQ to Entities 【发布时间】:2020-06-18 18:29:40 【问题描述】:我在数据库表用户中有:
pk firstName lastName
1 Mary Snow
...
LINQ to Entities 创建类:
public partial class User
public int pk get; set;
public string firstName get; set;
public string lastName get; set;
我试图创建这个类的新部分
public partial class User
public string FullName
get
return lastName + " " + firstName;
在我尝试在 IQueryable 中使用它之后,我得到异常“LINQ to Entities 不支持指定的类型成员 'FullName'”。我可以为此创建属性或扩展方法吗?
我的代码的许多部分都需要它。在每个查询 lastName + " " + firstName 中使用它对我来说并不方便。我不明白为什么我可以在 IQueryable 中使用 "where(x=> (x.lastName + " " + x.firstName) == "Mary Show")" 但我不能编写新属性并将其用作 " where(x=> x.FullName == "玛丽秀")"。
这是我对字段进行更多修改的例子。
更新:我使用 .NET Framework 4.5.2 和 Entity Framework 6。
upd2:我使用数据库优先方法。
【问题讨论】:
用 [NotMapped] 装饰属性 我试过了。我使用 System.ComponentModel.DataAnnotations.Schema 添加;然后我添加 [NotMapped] 属性。它没有帮助,我使用它时遇到异常。 抱歉,要先检查一下您使用的是 ef core 吗? 没有。感谢您的评论,我添加了有关它的信息。 您介意详细说明一下您是如何使用该物业的吗?请注意,我以为您只是在阅读实体。您无法访问 IQueryable 中的 fullName 等属性 【参考方案1】:您也可以使用 Fluent API 覆盖 DBContext 类中的 OnModelCreating 函数来执行此操作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity<User>().Ignore(t => t.FullName );
base.OnModelCreating(modelBuilder);
【讨论】:
哦,对不起。我使用数据库优先的方法,我忘记写了。以上是关于查询 LINQ to Entities 中联系字段的属性的主要内容,如果未能解决你的问题,请参考以下文章
linq to entities查询使用大于小于匹配数据库字符串日期方法
在 LINQ to Entities 查询中无法构造实体或复杂类型
在 Linq-to-Entities 查询中格式化日期会导致异常
LinQ to Entities,Max Date字段,按什么分组