找不到查询模式的实现

在我的 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.Web.tblPersoon”. “ Where”未找到。

甚至当我尝试以下方法时:

var query = (from p in tblPersoon select p).Single();

它给我一个错误说’选择’没有找到!

为我的表生成的类的代码可以在这里找到: http://pastebin.com/edx3XRhi

是什么导致了这一切,我又该如何解决呢?

谢谢你。

139339 次浏览

你错过了一个平等:

var query = (from p in tblPersoon where p.id == 5 select p).Single();

where子句必须导致布尔值。

或者你根本就不应该使用 where:

var query = (from p in tblPersoon select p).Single();

您可能需要添加一个 using语句到文件中。默认的 Silverlight 类模板不包括它:

using System.Linq;

tblPersoon是否实现了 IEnumerable<T>? 你可能需要使用:

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

这种错误(找不到查询模式的实现)通常发生在:

  • 您缺少 LINQ 命名空间的使用(using System.Linq)
  • 正在查询的类型不实现 IEnumerable<T>

编辑 :

除了查询 type (tblPersoon)而不是属性 tblPersoons之外,还需要一个上下文实例(定义 tblPersoons属性的类) ,如下所示:

public tblPersoon GetPersoonByID(string id)
{
var context = new DataClasses1DataContext();
var query = context.tblPersoons.Where(p => p.id == id).Single();
// ...

确保这些参考资料包括:

  • 系统,数据,Linq
  • 系统、数据、实体

然后添加 using 语句

using System.Linq;

我在生成强类型数据集时遇到了类似的问题,完整的错误消息是:

未能找到查询模式的实现 源类型“ MyApp.InvcHeadDataTable”。找不到“ Where”。 考虑显式指定范围变量‘ 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;

这招很管用。

我遇到了与 title 中描述的相同的错误,但对我来说,这只是安装 Microsoft access 12.0 oledb 再发行版,以便与 LinqToExcel 一起使用。

Hi 最简单的方法是将这个 IEnumable 转换为一个 Queryable

如果它是可查询的,那么执行查询就变得很容易。

请检查这个代码:

var result = (from s in _ctx.ScannedDatas.AsQueryable()
where s.Data == scanData
select s.Id).FirstOrDefault();
return "Match Found";

确保包含 系统 Linq。 这样你的错误就会得到解决。

对于那些在这个错误上浪费了太多时间的人(比如我) :

我收到了同样的错误: “无法找到源类型‘ DbSet’的查询模式的实现”,但我的解决方案是在 DbContext 级别修复一个错误。

当我创建我的上下文时,我想到了这个:

public class ContactContext : DbContext
{
public ContactContext() : base() { }


public DbSet Contacts { get; set; }
}

我的 Repository (我遵循 ASP.NET 指南中的 Repository 模式)看起来是这样的:

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; },突然查询被识别出来。


这可能就是 k.m 在他的回答中所说的,但是因为他提到了 IEnumerable<t>而不是 DbSet<<YourDomainObject>>,我不得不在代码中挖掘了几个小时,以找到引起这个头痛的那一行。

我也有同样的错误,但是对我来说,这是因为有一个名称相同的数据库和一个表。当我加入 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);
}

我更正了我的数据库上下文,之后一切都很好。

您一定是忘了像下面这样在文件中添加 using 语句:

using System.Linq;