web-dev-qa-db-ja.com

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

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

そして、私が次のことを試みても:

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

「選択」が見つからないというエラーが表示されます!

私のテーブル用に生成されたクラスのコードはここにあります: http://Pastebin.com/edx3XRhi

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

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

78
Schoof

tblPersoonIEnumerable<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();
    // ...
204
k.m

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

using System.Linq;
142
Bryan Watts

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

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

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

using System.Linq;
20
MobileMon

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

ソースタイプ 'MyApp.InvcHeadDataTable'のクエリパターンの実装が見つかりませんでした。 「どこ」が見つかりません。範囲変数「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;

それは御treat走を働いた。

6
Stephen Turner

平等が欠けています:

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

where句はブール値になる必要があります。

または、whereを使用しないでください:

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

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

クエリ可能であれば、クエリの実行が簡単になります。

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

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

必ずSystem.Linqを含めてください。これにより、エラーが解決されます。

0
Abhay Shiro

同じエラーが発生しましたが、私にとっては、同じ名前のデータベースとテーブルがあることに起因していました。 ADO .NET Entity Objectをプロジェクトに追加すると、データベースコンテキストファイルに必要なものが誤って生成されました。

// 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
vapcguy

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

0
BanMe

このエラーから多くの時間を無駄にしたあなた(私のような)にとって:

「ソースタイプ '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; }に変更すると、突然クエリが認識されました。


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

0
TylerSmall19