Как присоединить sp к таблице Linq - PullRequest
2 голосов
/ 23 февраля 2011

Я использую EF (сначала edmx, а не код), и я хочу присоединить sp к «нормальной» таблице, поэтому я использую следующий запрос linq:

var test = (from obj1 in e.myTable
            join obj2 in e.MySp(aString) on obj1.AStringProperty equals obj2.AStringProperty
            select r.description).ToList();

, который затем генерирует исключение NotsupportedException со следующимсообщение:

Unable to create a constant value of type 'Api.DataAccess.Contexts.MySp_Result'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

Но все свойства, которые я использую для соединения, являются строкой, поэтому единственное, что я могу предположить, это то, что тот факт, что сгенерированный объект, возвращаемый sp, имеет int? иlong? вызывает эту ошибку?Если так, как я мог обойти это?

Спасибо

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Вы не можете присоединиться к хранимым процедурам в SQL (linq генерирует SQL), вместо этого используйте пользовательскую функцию.

0 голосов
/ 23 февраля 2011

Это невозможно как в EF, так и в SQL. Запрос Linq-to-entity переведен в SQL. Нельзя объединить набор результатов из SP с любым другим запросом.

Единственно возможный путь:

var test = (from obj1 in e.myTable.ToList()             
            join obj2 in e.MySp(aString) on obj1.AStringProperty equals obj2.AStringProperty             
            select r.description).ToList(); 

Но он будет выполнен как Linq-To-Objects, поэтому весь контент myTable будет передан приложению, а также весь набор результатов из MySp и join будет выполнен в памяти.

0 голосов
/ 23 февраля 2011

Можете попробовать это:

var test = (from obj1 in e.myTable
            from obj2 in e.MySp(aString) 
            where obj1.AStringProperty == obj2.AStringProperty
            select r.description).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...