Не удалось найти реализацию шаблона запроса
в моем приложении silverlight я пытаюсь создать соединение с базой данных с помощью LINQ. Сначала я добавляю новый LINQ в класс SQL и перетаскиваю в него таблицу под названием "tblPersoon".
затем в моем сервисном файле я пытаюсь выполнить следующий запрос:
[OperationContract]
public tblPersoon GetPersoonByID(string id)
{
var query = (from p in tblPersoon where p.id == id select p).Single();
но в tblPersoon это дает мне следующую ошибку.
не может найти реализацию шаблона запроса для типа источника 'SilverlightApplication1.Сеть.tblPersoon'. "Где" нет найдено.
и даже когда я пробую следующее:
var query = (from p in tblPersoon select p).Single();
это дает мне ошибку, говоря, что "Select" не найден!
код для сгенерированного класса для моей таблицы можно найти здесь:http://pastebin.com/edx3XRhi
что вызывает это и как я мог бы решить эту проблему?
спасибо.
8 ответов
- это tblPersoon
реализация IEnumerable<T>
? Возможно, вам придется сделать это с помощью:
var query = (from p in tblPersoon.Cast<Person>() select p).Single();
такого рода ошибка (не удалось найти реализацию шаблона запроса) обычно возникает после:
- отсутствует использование пространства имен LINQ (
using System.Linq
) - тип, который вы запрашиваете, не реализует
IEnumerable<T>
редактировать:
помимо факта, вы запрашиваете тип (tblPersoon
), а не собственность tblPersoons
, вам также нужен экземпляр контекста (класс, который определяет tblPersoons
свойство), например:
public tblPersoon GetPersoonByID(string id)
{
var context = new DataClasses1DataContext();
var query = context.tblPersoons.Where(p => p.id == id).Single();
// ...
возможно, Вам потребуется добавить using
инструкция к файлу. Шаблон класса Silverlight по умолчанию не включает его:
using System.Linq;
у меня была аналогичная проблема с созданием строго типизированных наборов данных, полное сообщение об ошибке:
не может найти реализацию шаблона запроса для тип источника " MyApp.InvcHeadDataTable'. "Где" не нашли. Рассмотрим явное указание типа переменной диапазона 'row'.
из моего кода:
var x =
from row in ds.InvcHead
where row.Company == Session.CompanyID
select row;
поэтому я сделал, как он предложил, и явно указал тип:
var x =
from MyApp.InvcHeadRow row in ds.InvcHead
where row.Company == Session.CompanyID
select row;
, который работал лечить.
вам не хватает равенства:
var query = (from p in tblPersoon where p.id == 5 select p).Single();
where
предложение должно привести к логическому значению.
или вы не должны использовать where
все:
var query = (from p in tblPersoon select p).Single();
У меня была такая же ошибка, как описано в заголовке, но для меня это была просто установка Microsoft access 12.0 oledb redistributable для использования с LinqToExcel.
Привет самый простой способ сделать это должен преобразовать этот IEnumerable в Queryable
Если это queryable, то выполнение запросов становится легким.
пожалуйста, проверьте этот код:
var result = (from s in _ctx.ScannedDatas.AsQueryable()
where s.Data == scanData
select s.Id).FirstOrDefault();
return "Match Found";
обязательно указывайте
для тех из вас (как я), которые потратили слишком много времени на эту ошибку:
я получил ту же ошибку: "не удалось найти реализацию шаблона запроса для исходного типа" DbSet"", но решением для меня было исправление ошибки на уровне DbContext.
когда я создал свой контекст, у меня было так:
public class ContactContext : DbContext
{
public ContactContext() : base() { }
public DbSet Contacts { get; set; }
}
и мой репозиторий (я следовал шаблону репозитория в ASP.NET руководство) выглядело так:
public Contact FindById(int id)
{
var contact = from c in _db.Contacts where c.Id == id select c;
return contact;
}
моя проблема пришла из начальная настройка моего DbContext, когда я использовал DbSet в качестве универсального вместо типа.
сменил public DbSet Contacts { get; set; }
to public DbSet<Contact> Contacts { get; set; }
и вдруг запрос был признан.
это, вероятно, то, что К. м говорит в своем ответе, но так как он упомянул IEnumerable<t>
, а не DbSet<<YourDomainObject>>
мне пришлось пару часов копаться в коде, чтобы найти строку, которая вызвала эту головную боль.