2011-01-24 6 views

답변

0

문제는 엔티티에 Linq를 변환하려고하는 것입니다 쿼리에 엔터티 또는 복합 형식이 LINQ으로 구성 할 수 없습니다

var ret = (from item in contex.Items 
       select new Itemm 
       { 
        Title = item.Title, 
        Count = 1 // more complex: Count =item.refToAnotherEntity.Count()           
       }); 

public partial class Itemm 
{ 
    public int Count { get; set; } 
} 

내가 그 오류 :

내 쿼리입니다 SQL에 대한 전체 식. 그것은 당신의 "새로운"성명서로는 정확하게 가능하지 않습니다.

는 다음과 같은 시도 :

var ret = (from item in contex.Items 
      select new Itemm 
      ).ToList(); 
ret = (from item in ret 
     select new Itemm 
      { 
       Title = item.Title, 
       Count = 1           
      }).ToList(); 

은 기본적으로 당신이 결과는 SQL 서버에서 반환되어 있는지 만들고있어합니다 (ToList()를이 작업을 수행)를 재 구축하기 전에. 그것은 꽤 아니므로, 조금 정리해도되지만 위의 코드가 작동해야합니다.

+0

그리고 Count로 값을 설정하려면 어떻게해야합니까? 예를 들어이 항목이있는 사용자 수? (다른 개체에 대한 참조가있을 때) – asker

+0

^^는 전혀 이해가되지 않는 질문을 수정 해보십시오. –

+0

제 질문의 업데이트 된 버전을 확인하십시오 – asker

-1

당신은 (즉, IEnumerable<T>-IQueryable<T>에서 이동) 다음 이런 식으로 뭔가 할 수있는 클라이언트 측에 처리를 이동하고자하는 경우 그에서

var query = (from item in context.Items 
    select new Item {      
     Title = item.Title 
    }); 

var ret = query.AsEnumerable().Select(i => { 
    // Set the count. 
    i.Count = 1; 

    // Return the item. 
    return i; 
}); 

키는 IEnumerable<T> 아래로 떨어지고에서입니다 포인트, LINQ 공급자는 당신 에게이 문제를주지 않을 개체에 LINQ된다.

+0

"처리를 클라이언트 측으로 옮깁니다"라는 것이 무엇을 의미하는지 설명해주십시오. – asker

+0

심지어 여분의 속성없이 새로운 Itemm {Title = item.Title}을 선택하면 오류가 발생합니다. 'new Itemm'을 사용하는 것을 좋아하지 않습니다 – asker

+0

linq에서 엔터티 쿼리로 "새 선택"을 사용할 수 없습니다. –

0

당신의 질문은 올바른 SQL로 번역되지 않습니다. 왜냐하면 linq은 당신의 추가 속성에 대해 어떻게 해야할지 모르기 때문입니다.

사용자 지정 속성을 초기화하는 방법이 있습니다.

당신이 다음 데이터베이스에서로드 한 후로드 할 경우가) {}

부분 무효 OnCreated를 (생성 그리고 여기에 사용자 정의 초기화를 쓸 수 있습니다 할 수 있습니다 무시

protected override void OnLoaded (bool initial) { base.OnLoaded (초기); }

0

동일한 결과를 얻으려고합니다. 지금까지 가장 좋은 해결책은 부분 클래스에 추가 속성을 설정하는 Count 속성이있는 엔티티 래퍼를 만드는 것이 었습니다. 같은 2 익명의 유형을 선택할 수

var ret = (from item in contex.Items 
      select new ItemWithCount 
      { 
       Item = item, 
       Count = item.refToAnotherEntity.Count()           
      }).AsEnumerable().Select(x => x.Item); 

대신 래퍼를 만드는 :

public class ItemWithCount 
{ 
    public Item Item { get; set; } 
    public int Count 
    { 
     get { return Item.Count; } 
     set { Item.Count = value; } 
    } 
} 

그런 다음이 같은 조회 할 수있다 : 예를 들어 귀하의 케이스를 촬영 이 같은 것 속성을 사용하지만 쿼리가 끝나면 결과를 살펴보고 각 엔터티의 Count 속성 값을 설정해야합니다.이런 식으로 뭔가 :

var ret = (from item in contex.Items 
      select new 
      { 
       Item = item, 
       Count = item.refToAnotherEntity.Count()           
      }); 
Parallel.ForEach(ret, x => x.Item.Count = x.Count); 
var results = ret.Select(x => x.Item); 

나는 ... 나는 새로운 클래스를 만들 필요없이 해결책을 가지고 싶습니다 althouth, 어떤 아이디어를 첫 번째 옵션 역자 주?

관련 문제