쿼리 패턴의 구현을 찾을 수 없습니다.


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

는 IS tblPersoon구현 IEnumerable<T>? 다음을 사용하여 수행해야 할 수 있습니다.

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

이러한 종류의 오류 ( 쿼리 패턴의 구현을 찾을 수 없음 )는 일반적으로 다음과 같은 경우에 발생합니다.

  • LINQ 네임 스페이스 사용이 누락되었습니다 ( using System.Linq).
  • 쿼리중인 유형이 구현되지 않았습니다. IEnumerable<T>

편집 :

tblPersoonproperty 대신 type ( ) 을 쿼리하는 것 외에도 다음과 tblPersoons같이 컨텍스트 인스턴스 ( tblPersoons속성 을 정의하는 클래스)가 필요합니다 .

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

My DataClasses1.Desinger.cs (코드 LINQ 자동 생성)에는 IEnumerable <T>가 포함되지 않습니다. public System.Data.Linq.Table<tblPersoon> tblPersoons { get { return this.GetTable<tblPersoon>(); } } 그리고 내가 사용할 때 : var query = (from p in tblPersoon.Cast <Person> () select p) .Single (); .Cast에서 다음과 같은 오류가 발생합니다. 'SilverlightApplication1.Web.tblPersoon'에 '캐스트'에 대한 정의가 포함되어 있지 않습니다
Schoof

1
@ThomasSchoof : 오타일까요? 유형이이면 속성이 호출됩니다 tblPersoons( 끝에 있는 s 참고 ) tblPersoon. 유형에 대한 속성 대신 유형을 쿼리합니다.
km

내가 시도하면 var query = (from p in tblPersoons select p).Single();tblPersoons가 존재하지 않는다고 말합니다.
Schoof

1
나는 SQL에 LINQ는 (따라서 업데이트 데이터베이스에 의미라고 생각하지 않는 쿼리 그러나 당신이 그 주제에 몇 가지 도움이 찾을 수 있습니다, 언어 통합 쿼리에서) SQL MSDN 페이지에 LINQ ( 쿼리의없이 업데이트 절).
km

27
추가 을 System.Linq를 사용하는 것은 나를 위해 그것을했다 ... :)
Guruprasad 사용자 라오

179

using파일에 명령문 을 추가해야 할 수도 있습니다. 기본 Silverlight 클래스 템플릿에는 다음이 포함되어 있지 않습니다.

using System.Linq;

답변 해 주셔서 감사합니다. 그러나 using 문이 이미 있습니다.
Schoof 2011

1
답변 해 주셔서 감사합니다 ... 이것은 내 문제를 해결했습니다 !!! 하지만 ... 제공 할 수있는 추가 설명이 있습니까?
Joe

대박!! 감사합니다
blue piranha

분노. 감사합니다.
Barry

30

다음 참조가 포함되어 있는지 확인하십시오.

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

그런 다음 using 문을 추가합니다.

using System.Linq;

1
대단히 감사합니다
Mohammed Z. Aljezawi

7

생성 된 강력한 형식의 데이터 세트와 비슷한 문제가 있었는데 전체 오류 메시지는 다음과 같습니다.

소스 유형 '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;

치료 효과가있었습니다.


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 액세스 12.0 oledb를 설치하는 것뿐이었습니다.


0

안녕하세요 이 작업을 수행하는 가장 쉬운 방법은 쿼리 가능한에이 IEnumerable을 변환하는 것입니다

쿼리 가능한 경우 쿼리 수행이 쉬워집니다.

이 코드를 확인하십시오 :

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

나는 내 데이터베이스 컨텍스트를 수정했고 그 후 모두 괜찮 았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.