私の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
これは何が原因で、どのようにこれを解決できますか?
ありがとうございました。
tblPersoon
はIEnumerable<T>
を実装していますか?次を使用して行う必要がある場合があります。
var query = (from p in tblPersoon.Cast<Person>() select p).Single();
この種のエラー(クエリパターンの実装が見つかりませんでした)は、通常次の場合に発生します。
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();
// ...
using
ステートメントをファイルに追加する必要がある場合があります。デフォルトのSilverlightクラステンプレートには含まれていません。
using System.Linq;
これらの参照が含まれていることを確認してください。
次に、usingステートメントを追加します
using System.Linq;
生成された厳密に型指定されたデータセットで同様の問題が発生しました。完全なエラーメッセージは次のとおりです。
ソースタイプ '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走を働いた。
平等が欠けています:
var query = (from p in tblPersoon where p.id == 5 select p).Single();
where
句はブール値になる必要があります。
または、where
を使用しないでください:
var query = (from p in tblPersoon select p).Single();
こんにちはこれを行う最も簡単な方法は、このIEnumerableをQueryableに変換することです
クエリ可能であれば、クエリの実行が簡単になります。
このコードを確認してください:
var result = (from s in _ctx.ScannedDatas.AsQueryable()
where s.Data == scanData
select s.Id).FirstOrDefault();
return "Match Found";
必ずSystem.Linqを含めてください。これにより、エラーが解決されます。
同じエラーが発生しましたが、私にとっては、同じ名前のデータベースとテーブルがあることに起因していました。 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);
}
データベースコンテキストを修正し、その後はすべて問題ありませんでした。
タイトルで説明したのと同じエラーが発生しましたが、私にとっては、LinqToExcelで使用するために再配布可能なMicrosoft Access 12.0 oledbをインストールするだけでした。
このエラーから多くの時間を無駄にしたあなた(私のような)にとって:
「ソースタイプ '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>>
に言及したので、この頭痛の原因となった行を見つけるために数時間コードを掘り下げなければなりませんでした。