Вот ваша проблема.Я не знаю, есть ли решение для этого.
Как вы сказали в (сейчас удаленном, к сожалению, требующем, чтобы я ответил) комментарии, вы получаете исключение
LINQ to Entities не распознает метод Int64 GetValue [Int64] (System.Activities.LocationReference), и этот метод нельзя преобразовать в выражение хранилища.
в вашем запросе Linq, analysisParameter - это переменная, определенная в рабочем процессе.Эта переменная на самом деле является экземпляром, который расширяет тип System.Activities.LocationReference и NOT CalculationParameter .
Обычно, когда рабочий процесс выполняется, LocationReference содержит всю информацию, необходимую для поиска значения, которое ему присвоено.Это значение не извлекается до последнего возможного момента.Во время выполнения процесс поиска (получение исполняемого контекста, получение значения, преобразование его в ожидаемый тип) управляется рабочим процессом.
Однако, когда вы вводите Linq в смесь, у нас возникает проблемавы испытываетеКак вы можете знать, а может и не знать, ваше выражение компилируется в ту же версию метода расширения.
(From tariffDetail In db.Context.TariffDetails
Where tariffDetial.TariffId = calculationParameter.TariffId)
.FirstOrDefault()
компилируется в
db.Context.TariffDetails
.Where(x => x.TariffId = calculationParameter.TariffId)
.FirstOrDefault();
Когда это выполняется, L2E на самом деле не выполняет этот код .Он получает , интерпретируется и преобразуется в SQL-запрос, который выполняется к базе данных.
Поскольку интерпретатор не всезнающий, существует четко определенный набор ограничений на методы, которые вы можете использовать в запросе L2S.
К сожалению для вас, получениетекущее значение LocationReference
не является одним из них .
TL: DR Вы не можете сделать это.
Что касается обходных путей, единственное, что я думаю, выможно создать серию методов расширения для вашего типа контекста данных или добавить методы в свой класс CalculationParameter, который вы можете вызывать из редактора выражений.Вы можете создавать запросы Linq to Entities в этих методах, так как все типы уже будут разыменованы средой выполнения рабочего процесса, что означает, что вам не придется беспокоиться о блокировке интерпретатором L2E LocationReferences.
* Редактировать: Обходной путь можно найти здесь (спасибо Slauma , который упомянул это в комментарии к вопросу)