Определите бизнес-методы, используемые linq для сущностей и linq для объектов - PullRequest
0 голосов
/ 01 марта 2012

Я использую в своем проекте много LINQ-запросов и бизнес-методов. Чтобы разрешить использование этого бизнес-метода из Iqueryable:

  • Я определил функции UDF в SQL Server (с необходимыми параметрами)
  • Добавьте этот UDF к модели приложения EDMX
  • И создайте шлюз между UDF и LinQ с помощью такого метода в частичный класс, который наследует от dbcontext:

      [EdmFunction("MyProject.Store", "GetTaxesOfProduct")]
       public static Decimal GetTaxesOfProduct(Decimal amount, Int32 TaxMethod)
       {
           throw new NotSupportedException("Not direct access possible, use with E-SQL or LINQ");
       }
    

Это прекрасно работает для IQueryable. Но проблема в том, что, чтобы использовать этот метод из простого объекта (не связанного с записью в базе данных), мне нужно сделать что-то жуткое, как это:

var query = from foo in context.JustATable select context.GetTaxesOfProduct(15.55, 3);

А недавно я наткнулся на этого http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx, который объясняет, как с помощью выражения можно создать метод, который можно использовать из объектов C # и IQueryable

Итак, с помощью выражения можно ли сделать бизнес-методы похожими на мой метод, но без использования UDF и просто выражений?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 марта 2012

Это зависит от содержимого вашего UDF.Выражение может работать только с объектами, определенными в вашей модели, и использовать только операции, предоставляемые поставщиком Entity Framework для вашей базы данных.Поэтому, если вы используете какой-либо сложный оператор SQL с неподдерживаемым эквивалентом для LINQ или не отображенных функций внутри UDF, он не будет работать.

...