找不到查询模式的实现

Sch*_*oof 82 c# sql linq silverlight wcf

在我的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();
Run Code Online (Sandbox Code Playgroud)

但是在tblPersoon它给了我以下错误.

无法找到源类型"SilverlightApplication1.Web.tblPersoon"的查询模式的实现.'哪里'找不到.

即使我尝试以下内容:

var query = (from p in tblPersoon select p).Single();
Run Code Online (Sandbox Code Playgroud)

它给我一个错误,说'找不到'!

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

造成这种情况的原因是什么,我怎么能解决这个问题?

谢谢.

k.m*_*k.m 216

正在tblPersoon实施IEnumerable<T>吗?您可能需要使用以下方法:

var query = (from p in tblPersoon.Cast<Person>() select p).Single();
Run Code Online (Sandbox Code Playgroud)

这种错误(无法找到查询模式的实现)通常在以下情况下发生:

  • 您缺少LINQ命名空间用法(using System.Linq)
  • 键入您查询未实现 IEnumerable<T>

编辑:

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

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

  • 使用System.Linq**添加**为我做了.. :) (21认同)

Bry*_*tts 149

您可能需要向using文件添加语句.默认的Silverlight类模板不包含它:

using System.Linq;
Run Code Online (Sandbox Code Playgroud)


小智 28

您一定忘记了在文件中添加一条 using 语句,如下所示:

using System.Linq;
Run Code Online (Sandbox Code Playgroud)


Mob*_*Mon 24

确保包含以下参考:

  • 将System.Data.Linq
  • System.Data.Entity的

然后添加using语句

using System.Linq;
Run Code Online (Sandbox Code Playgroud)


Ste*_*ner 6

我对生成的强类型数据集有类似的问题,完整的错误消息是:

无法找到源类型"MyApp.InvcHeadDataTable"的查询模式的实现.'哪里'找不到.考虑明确指定范围变量'row'的类型.

从我的代码:

        var x =
            from row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;
Run Code Online (Sandbox Code Playgroud)

所以我按照它的建议做了并明确指定了类型:

        var x =
            from MyApp.InvcHeadRow row in ds.InvcHead
            where row.Company == Session.CompanyID
            select row;
Run Code Online (Sandbox Code Playgroud)

这是一种享受.


Adr*_*iro 5

你错过了一个平等:

var query = (from p in tblPersoon where p.id == 5 select p).Single();
Run Code Online (Sandbox Code Playgroud)

where 子句必须导致布尔值.

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

var query = (from p in tblPersoon select p).Single();
Run Code Online (Sandbox Code Playgroud)