2013-03-18 3 views
0

검색 페이지에 기능을 추가하려고합니다. 기본적으로 특정 조건이 참일 경우 (다른 테이블과의 조인을 기반으로) CSS 클래스를 적용하십시오. 여기 내 (간체) 모델입니다 : LINQ를 사용왼쪽 결합을 전송할 수 없습니다.

MyTable 
int Key 
string Someinfo1 
string Someinfo2 
string CssClass 

SomeTable 
int Key 
string CssClass 

, 나는 두 개의 테이블을 조인하고 SearchResult.CssClass = SomeTable.CssClass을 지정하고 싶습니다. 실제로이 할당에 사용되는 논리가 있습니다. 오류

The entity or complex type 'MyTable' cannot be constructed in a LINQ to Entities query.

을 제공

var test = db.MyTable 
    .GroupJoin(db.SomeTable, 
       m => m.Key, 
       s => s.Key, 
       (m, s) => new {m, s}) 
    .SelectMany(x => x.h.DefaultIfEmpty(), 
       (x, y) => new MyTable 
       { 
        Key = x.m.Key, 
        Someinfo1 = x.m.Someinfo1, 
        Someinfo2 = x.m.Someinfo2, 
        CssClass = y.CssClass 
       } 

이 코드 나누기, 단순히 다음 익명 형식 (x, y) => new를 만드는 주조 (x, y) => new MyTable을 변경하면 일이 내가 그들에 기대하는 방법을 작동합니다. 하지만 현재 존재하는 뷰와 호환되도록 MyTable이라는 형식을 지정해야합니다. 그렇지 않으면 잘 작동 할 때 왜 캐스팅을 시도 할 때 깨지나요? 사실 이후에 주조하는 것도 효과가 없습니다. 미리 감사드립니다

편집 : MyTableCssClass을 제외하고 데이터베이스 테이블에 매핑됩니다. 나는 MyTable.CssClass의 원하는 값은 SomeTable에서 오는 요소

modelBuilder.Entity<MyTable>().Ignore(m => m.CssClass);

을 무시 EF를 구성했습니다.

DefaultIfEmpty()는 모든 항목을 MyTable에 포함시키는 데 사용됩니다. 이 키가 MyTable에 존재하는 경우가 존재하지만 오류가 말한다 것처럼

+0

이 문제를 읽는 데 문제가 있습니다. 두 테이블을 그룹 조인하여 테이블 중 하나의 객체로 다시 투영하려는 것은 사용자의 의도입니까? 왜냐하면 당신은'db.MyTable'을 쿼리하고 나서'MyTable' 타입의 객체를 선택하기 때문입니다. – IronMan84

+0

또한'x.h.DefaultIfEmpty'는 무엇입니까? 'h '가 그것과 무엇을 관계가 있습니까? – IronMan84

+0

질문의 맨 아래에 몇 가지 정보를 추가했습니다. 희망은 도움이된다 – Jeff

답변

1

SomeTable, 당신은 쿼리 내에서 엔티티의 새로운 인스턴스를 만들 수 없습니다.

속성이 SomeTableMyTable 속성을 재정의하려는 것으로 보입니다. 이 솔루션의 한 가지 단점은 엔티티가 저장되면 새로운 CssClass 값이 MyTable으로 다시 저장된다는 것입니다. 원하는 엔티티가 저장되지만 사용법에 따라 다르지는 않습니다. 이 실제로 일 때이 작업을 수행해야하는 경우 엔티티를 수화 (예 : ToList())해야하고 관련 엔티티의 값으로 값을 업데이트해야합니다.

독립형 실제 엔터티 클래스의 형식을 만드는 것이 가장 좋을 것입니다.이 형식은보기를 엔터티 클래스에 연결하는 대신보기에서 사용합니다. 두 클래스간에 매핑 작업을 추가하지만 직면 한 것과 같은 문제를 피할 수 있습니다. 이미 데이터 모델에서 볼 수있는 한 가지 도전 - CssClass 값을 MyTable 또는 SomeTable에 다시 저장해야하는지 어떻게 알 수 있습니까?

+0

나는 그것을하는 것이 이해되지 않을 것이라고 생각한다. 게으름은 나를 다시 얻는다. 나는 단순히 다른 ViewModel을 만드는 것에 대한 해결 방법을 찾기 위해 노력 했었기 때문에, 나는 이것을 시도했다.위의 "쓰레기를 무시하십시오. – Jeff

+0

아쉽게도 스토리지 모델과 뷰 모델이 다를 때마다보기에서 사용하기 위해 스토리지 모델을 변경하거나 변경하지 않는 것이 가장 좋습니다. –

관련 문제