C# EntityFramework,如何基于非实体列查询条目?
我想存储和查询一个计算字段。例如,休闲表:C# EntityFramework,如何基于非实体列查询条目?,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我想存储和查询一个计算字段。例如,休闲表: public class ModelTest { [Key] public int Id { get; set; } public int A { get; set; } public int B { get { return CSharpFunction(A) ; } } } 我希望能够像这样查询表中的值 results = db.ModelTests.Where(m => m.B = 10); 但是
public class ModelTest
{
[Key]
public int Id { get; set; }
public int A { get; set; }
public int B { get { return CSharpFunction(A) ; } }
}
我希望能够像这样查询表中的值
results = db.ModelTests.Where(m => m.B = 10);
但是我得到了一个衰减错误:
LINQ to实体中不支持指定的类型成员“B”。仅支持初始值设定项、实体成员和实体导航属性
唯一的方法是从dbdb.ModelTests.ToList()
查询所有条目,然后根据Where statent进行选择
是否可以将B
值存储到数据库中并优化此类查询
(也欢迎其他解决方案)
谢谢实际上,当您从DbContext对象使用linq表达式时,您使用的是linq到实体
检查另一个答案 只要有一个支持属性,比如计算的Get_Prop Value。我不会将计算字段映射到这样的列。我甚至怀疑它会起作用。您可以对其使用[NotMapped]属性。如果计算类型允许,您可以在数据库表中创建计算列B。只要您使用IQueryable,它总是基于表达式树构造结果。在这种情况下,B不会映射到实体。。这就是为什么。我如何测试您所说的内容?如果您能够使用
IQueryable结果
,您可以。这篇文章很好地解释了这一点,我们理解了其中的区别。然而,B不是一个简单的变量。像这样的查询,我得到了休整错误。”LINQ to实体中不支持指定的类型成员“B”。只支持初始值设定项、实体成员和实体导航属性。“这就是我不能这样做的原因。@Danielsanto您最好使用存储过程。您仍然可以使用返回ModelTest集合的实体框架调用它。