无法找到查询模式的实现

139
在我的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' 类型的源类型的查询模式实现。未找到“Where”。

即使我尝试以下操作:

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

它给我一个错误,说找不到“Select”!

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

是什么原因导致这个问题,我该如何解决?

谢谢。

11个回答

329

tblPersoon是否实现了IEnumerable<T>接口?您可能需要使用以下方法进行实现:

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

这种错误(Could not find an implementation of the query pattern)通常发生在以下情况下:

  • 您缺少 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();
    // ...

1
@ThomasSchoof:可能是打错了吗?属性名为tblPersoons(注意末尾的s),而类型为tblPersoon。你查询的是类型,而不是类型上的属性。 - k.m
1
我认为LINQ to SQL并不是用来更新数据库的(因此在语言集成查询中有“查询”一词),但是您可以在LINQ to SQL MSDN页面无需查询更新部分)找到一些相关帮助。 - k.m
48
加上 using System.Linq 就可以了。 :) - Guruprasad J Rao
1
Visual Studio 2019 --> 缺少 System.Linq 可能会导致此问题,Intellisense 不一定会自动列出它。 - Mike Upjohn
添加 System.Linq 对我很有帮助。谢谢! :) - Jyoti
显示剩余9条评论

267

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

using System.Linq;

谢谢你的回答,但是 using 语句已经存在了。 - Schoof
1
谢谢你的回答...这解决了我的问题!!! 但是...你能再提供一些额外的解释吗? - Joe
1
令人恼火。谢谢。 - Barry
这对我在Visual Studio中遇到的问题起作用了。谢谢。确实令人恼火。 - djg
2
这个 Intellisense 没有识别出要添加 using 语句。 - Mike Upjohn
显示剩余2条评论

42

确保以下引用被包含:

  • System.Data.Linq
  • System.Data.Entity

然后添加 using 语句。

using System.Linq;

28

你必须忘记了向文件中添加类似这样的using语句:

using System.Linq;

这是答案。 - Jijo Nair

8

我曾经遇到过类似的问题,问题的完整错误信息如下所示:

无法找到源类型“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;

效果非常好。


5

您缺少一个等号:

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

where子句的结果必须为布尔值。

或者根本不应该使用where

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

谢谢,我确实错过了我的相等性,这很愚蠢。但现在我遇到了以下错误:错误1:找不到“SilverlightApplication1.Web.tblPersoon”源类型的查询模式实现。未找到“Where”。 - Schoof

1

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

我也遇到了同样的错误:“无法找到源类型为'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; },突然间查询被识别了。


这可能是k.m在他的答案中所说的,但由于他提到的是而不是,因此我不得不在代码中搜索几个小时才找到导致这个头痛的那一行代码。

0

我遇到了与标题描述相同的错误,但对我来说,解决方法很简单,只需安装Microsoft Access 12.0 OLEDB可再发行程序以与LinqToExcel一起使用。


0

我遇到了相同的错误,但对我来说,原因是数据库和表格同名。当我将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);
}

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


0
我遇到了同样的问题,这段代码片段救了我的一天:
````
使用 System.Linq
使用System.Linq.Dynamic.Core
````

1
请只在回答中提供真正新颖和重要的信息。接受的答案是在12年前给出的,而System.Linq.Dynamic.Core只对您来说才是必要的。 - undefined
@GertArnold 你怎么知道这只对我来说是必要的,也许将来对其他人也会是必要的呢?而且,我并没有使用某种定制版的C#,我只是使用大家都在用的那个,所以它不可能只对我来说是必要的。 - undefined
using System.Linq.Dynamic.Core与问题无关,你只是碰巧使用了它。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接