Не удалось найти реализацию шаблона запроса


в моем приложении silverlight я пытаюсь создать соединение с базой данных с помощью LINQ. Сначала я добавляю новый класс LINQ to 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();

это дает мне ошибку, говоря "выбрать" не найден!

код для сгенерированного класса для моей таблицы можно найти здесь:http://pastebin.com/edx3XRhi

что вызывает это и как бы я мог решить эту проблему?

спасибо.

8 60

8 ответов:

- это tblPersoon реализация IEnumerable<T>? Возможно, вам придется сделать это с помощью:

var query = (from p in tblPersoon.Cast<Person>() select p).Single();

такого рода ошибки (не удалось найти реализацию шаблона запроса) обычно возникает после:

  • отсутствует использование пространства имен LINQ (using System.Linq)
  • тип, который вы запрашиваете, не реализует IEnumerable<T>

Edit:

помимо того, что вы тип запроса (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;

убедитесь, что эти ссылки включены:

    у меня была аналогичная проблема с созданием строго типизированных наборов данных, полное сообщение об ошибке:

    не может найти реализацию шаблона запроса для типаприложение источник'.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; } до public DbSet<Contact> Contacts { get; set; } и вдруг запрос был признан.


    это, вероятно, то, что говорит к. м. В своем ответе, но так как он упомянул IEnumerable<t>, а не DbSet<<YourDomainObject>> мне пришлось копаться в коде в течение нескольких часов, чтобы найти строку, которая вызвала эту головную боль.