Запрос по вычисляемому свойству в EF

Как я могу запросить объекты по вычисленному свойству: объект My Book:

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;
        }
    }

}

Я хочу выбрать все книги с SellPrice > 5000, но я не могу использовать SellPrice в строке запроса LINQ или лямбда-выражении. Я немного погуглил, и это кажется хорошим. Но не могу выразить свое мнение, чтобы вычислить SellPrice в рабочем порядке

2 ответа

Решение

Попробуйте это, это может помочь вам:

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();
Другие вопросы по тегам