クエリパターンの実装が見つかりませんでした


102

私の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

これは何が原因で、どうすればこれを解決できますか?

ありがとうございました。

回答:


255

されるtblPersoon実装IEnumerable<T>?あなたはそれを使用する必要があるかもしれません:

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

この種のエラー(クエリパターンの実装が見つからなかった)は通常、次の場合に発生します。

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

私のDataClasses1.Desinger.cs(コードLINQ自動生成)にIEnumerable <T>が含まれていません。 public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } } そして私が使用するとき:var query =(pからtblPersoon.Cast <Person>()select p).Single(); .Castで次のエラーが発生します。'SilverlightApplication1.Web.tblPersoon'には 'Cast'の定義が含まれていません
Schoof

1
@ThomasSchoof:タイプミスかもしれませんか?typeがである間に、プロパティが呼び出されますtblPersoons(末尾のsに注意)tblPersoon。タイプのプロパティの代わりにタイプを照会します。
キロ

試しvar query = (from p in tblPersoons select p).Single();てみると、tblPersoonsは興奮していません。
Schoof

1
私は、LINQ to SQLは、更新データベース(それゆえに意味されたとは思わないクエリしかしあなたはこれらのトピックといくつかの助けを見つけることができ、統合言語クエリで)SQL MSDNのページへのLINQクエリを実行しないで更新するセクションを)。
キロ

27
System.Linq使用して追加すると、.. :)
Guruprasad Rao

179

usingファイルにステートメントを追加する必要がある場合があります。既定のSilverlightクラステンプレートには含まれていません。

using System.Linq;

答えてくれてありがとう、でもusingステートメントはもうそこにありました。
スクーフ

1
答えてくれてありがとう...これで私の問題は修正されました!!! しかし...あなたが提供できる追加の説明はありますか?
ジョー

驚くばかり!!ありがとう
青いピラニア

激怒。ありがとうございました。
バリー

30

これらの参照が含まれていることを確認してください:

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

次に、usingステートメントを追加します

using System.Linq;

1
どうもありがとうございました
Mohammed Z. Aljezawi

7

生成された厳密に型指定されたデータセットで同様の問題があり、完全なエラーメッセージは次のとおりです。

ソースタイプ 'MyApp.InvcHeadDataTable'のクエリパターンの実装が見つかりませんでした。「どこ」が見つかりません。範囲変数「行」のタイプを明示的に指定することを検討してください。

私のコードから:

        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'のクエリパターンの実装が見つかりませんでした。「どこ」が見つかりません。
Schoof

0

タイトルで説明したのと同じエラーがありましたが、私にとっては、LinqToExcelで使用するために再配布可能なMicrosoft Access 12.0 oledbをインストールするだけでした。


0

こんにちはこれを行う最も簡単な方法は、このIEnumerableをQueryableに変換する

クエリ可能な場合、クエリの実行が簡単になります。

このコードを確認してください:

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

System.Linqが含まれていることを確認してください。これにより、エラーが解決されます。


0

このエラーのために時間を無駄にしすぎたあなた(私のような)のために:

私は同じエラーを受け取りました:「ソースタイプ '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;
    }

タイプの代わりにジェネリックとしてDbSetを使用したとき、私の問題は私のDbContextの初期セットアップから発生しました。

に変更public DbSet Contacts { get; set; }したところpublic DbSet<Contact> Contacts { get; set; }、突然クエリが認識されました。


これはおそらくkmが彼の回答で言っていることですが、彼が言及IEnumerable<t>したので、DbSet<<YourDomainObject>>私はこの頭痛の原因となった行を見つけるためにコードを数時間掘り下げる必要がありました。


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);
}

その後、データベースコンテキストを修正したところ、問題はありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.