В моем приложении 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.Web.tblPersoon. «Где» не найдено.
И даже когда я пробую следующее:
var query = (from p in tblPersoon select p).Single();
Это дает мне сообщение об ошибке «Выбрать» не найдено!
Код для сгенерированного класса для моей таблицы можно найти здесь: http://pastebin.com/edx3XRhi
Что вызывает это и как я могу это решить?
Спасибо.
public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } }
И когда я использую: var query = (from p in tblPersoon.Cast <Person> () select p) .Single (); Это дает мне следующие ошибки на .Cast. «SilverlightApplication1.Web.tblPersoon» не содержит определения для «Cast»tblPersoons
(обратите внимание на s в конце), а тип -tblPersoon
. Вы запрашиваете тип, а не свойство по типу.var query = (from p in tblPersoons select p).Single();
он скажет мне, что tblPersoons даже не существует.Возможно, вам потребуется добавить
using
в файл заявление. Шаблон класса Silverlight по умолчанию не включает его:using System.Linq;
источник
Убедитесь, что эти ссылки включены:
Затем добавьте оператор using
using System.Linq;
источник
У меня была аналогичная проблема с сгенерированными строго типизированными наборами данных, полное сообщение об ошибке было:
Из моего кода:
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, распространяемая для использования с LinqToExcel.
источник
Привет, самый простой способ сделать это - преобразовать этот IEnumerable в Queryable
Если это запрашиваемый, то выполнение запросов становится простым.
Пожалуйста, проверьте этот код:
var result = (from s in _ctx.ScannedDatas.AsQueryable() where s.Data == scanData select s.Id).FirstOrDefault(); return "Match Found";
Убедитесь, что вы включили System.Linq . Таким образом ваша ошибка будет решена.
источник
Для тех из вас (вроде меня), которые потратили слишком много времени на эту ошибку:
Я получил ту же ошибку: «Не удалось найти реализацию шаблона запроса для типа источника '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; }
и вдруг запрос был распознан.Вероятно, это то, что km говорит в своем ответе, но поскольку он упомянул,
IEnumerable<t>
а не,DbSet<<YourDomainObject>>
мне пришлось копаться в коде в течение пары часов, чтобы найти строку, которая вызвала эту головную боль.источник
У меня была такая же ошибка, но для меня это было связано с тем, что база данных и таблица были названы одинаково. Когда я добавил объект Entity Object ADO .NET в свой проект, он неправильно сгенерировал то, что я хотел в файле контекста базы данных:
// Table public virtual DbSet<OBJ> OBJs { get; set; }
который должен был быть:
public virtual DbSet<OBJ> OBJ { get; set; }
А также
// Database? public object OBJ { get; internal set; }
который мне на самом деле не нужен, поэтому я закомментировал его.
Я пытался втянуть свою таблицу вот так, в своем контроллере, когда получил ошибку:
protected Model1 db = new Model1(); public ActionResult Index() { var obj = from p in db.OBJ orderby p.OBJ_ID descending select p; return View(obj); }
Я исправил контекст своей базы данных, и после этого все было в порядке.
источник