在 EF 中通过计算 属性 查询
Query by computed property in EF
如何通过计算 属性 查询对象:
我的图书实体:
Book{
//DB field
bookID int PK,
bookName nvarchar,
artID int FK Article(artID)
int OriginalPrice;
int Discount;
//computed
public int SellPrice{
get{
return (OriginalPrice - OriginalPrice*Discount/100 )/500*500;
}
}
}
我想 select 所有书的售价都大于 5000,但我不能在 LINQ 查询字符串或 lambda 中使用售价。
我做了一些谷歌搜索,这看起来不错。但是不能用我的表达式以工作方式计算 SellPrice
试试这个,它可能对你有帮助:
var books = (from e in context.Books.AsEnumerable()
where ((e.OriginalPrice.ToDecimal() - e.OriginalPrice * e.Discount.ToDeciaml() / 100).ToDecimal() / 500 * 500) > 5000
select e).ToList();
扩展方法ToDecimal
是
public static class Extensions
{
public static decimal ToDecimal(this int value)
{
return Convert.ToDecimal(value);
}
}
您不能在没有具体化查询的情况下使用计算表达式。
在您的情况下,您可以分解 LINQ 查询中的表达式。
我认为您正在使用 /500*500 以 500 个单位截断。
var books = context.Books.Where(b => ((int)((OriginalPrice - (int)(OriginalPrice * Discount / 100) )/500))*500 > 5000).ToList();
如何通过计算 属性 查询对象: 我的图书实体:
Book{
//DB field
bookID int PK,
bookName nvarchar,
artID int FK Article(artID)
int OriginalPrice;
int Discount;
//computed
public int SellPrice{
get{
return (OriginalPrice - OriginalPrice*Discount/100 )/500*500;
}
}
}
我想 select 所有书的售价都大于 5000,但我不能在 LINQ 查询字符串或 lambda 中使用售价。
我做了一些谷歌搜索,这看起来不错。但是不能用我的表达式以工作方式计算 SellPrice
试试这个,它可能对你有帮助:
var books = (from e in context.Books.AsEnumerable()
where ((e.OriginalPrice.ToDecimal() - e.OriginalPrice * e.Discount.ToDeciaml() / 100).ToDecimal() / 500 * 500) > 5000
select e).ToList();
扩展方法ToDecimal
是
public static class Extensions
{
public static decimal ToDecimal(this int value)
{
return Convert.ToDecimal(value);
}
}
您不能在没有具体化查询的情况下使用计算表达式。
在您的情况下,您可以分解 LINQ 查询中的表达式。
我认为您正在使用 /500*500 以 500 个单位截断。
var books = context.Books.Where(b => ((int)((OriginalPrice - (int)(OriginalPrice * Discount / 100) )/500))*500 > 5000).ToList();