Службы Silverlight и RIA с LINQ-to-SQL DataContext - невозможно использовать запросы linq на стороне клиента - PullRequest
2 голосов
/ 18 сентября 2011

Я создал голое приложение Silverlight с помощью RIA Services.Класс обслуживания домена использует класс LINQ-to-SQL в качестве своего DataContext.

В моем приложении Silverlight это работает нормально:

CMSContext db = new CMSContext();

gridTest.ItemsSource = db.Files; 
db.Load(db.GetFilesQuery());

Но я не могу этого сделать, например:

db.Load(from f in db.GetFilesQuery() where f.Id > 2 select f);

Ошибки компиляции:

Error   5   The type arguments for method 'System.ServiceModel.DomainServices.Client.DomainContext.Load<TEntity>(System.ServiceModel.DomainServices.Client.EntityQuery<TEntity>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.  C:\SilverLight\Silverlight 4 Projects\RIATest2\RIATest2\MainPage.xaml.cs    35  4   RIATest2
Error   4   Could not find an implementation of the query pattern for source type 'System.ServiceModel.DomainServices.Client.EntityQuery<RIATest2.Web.File>'.  'Where' not found.   C:\SilverLight\Silverlight 4 Projects\RIATest2\RIATest2\MainPage.xaml.cs    35  22  RIATest2

Есть советы?

Обновление:

Решение состоит в том, чтобы добавить это:

using System.ServiceModel.DomainServices.Client; 

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Решение:

using System.ServiceModel.DomainServices.Client; 
0 голосов
/ 18 сентября 2011

Вам необходимо определить запрос linq в отдельной строке:

var query = from f in db.GetFilesQuery() where f.Id > 2 select f;
db.Load(query);

Другой вариант - использовать лямбда-выражение:

db.Load(db.GetFilesQuery().Where(f => f.Id > 2));
...