2013-11-21 3 views
0

올바른 용어를 모르지만 테이블에 존재하지 않는 "코딩 된 필드"를 Entity Framework 5 LINQ 쿼리에 포함시키는 방법이 있습니까?LINQ 쿼리 (EF 5)에 코딩 된 필드 값 포함

예를 들어, SQL에서이 작업을 수행 할 수 있습니다

SELECT 'Ledger' AS type, (...) FROM table 

그래서 쿼리 결과 값 '레저'와 '형태'라는 필드를 포함. LINQ 쿼리에서이 작업을 수행 할 수 있습니까?

그리고 왜 쿼리에 있어야하는지 묻기 전에 쿼리가 여러 테이블의 합집합이고 데이터가 나온 테이블의 지정이 필요하기 때문입니다. 이것없이 나는 각각을 개별적으로 질의 한 다음 그들을 병합 할 필요가있을 것이다.

+0

데이터베이스 스키마에서 클래스 디자인을 기반으로해서는 안됩니다. 특히 객체를 상위 레이어로 전달할 때. –

+0

@ P.Brian.Mackey 그렇지 않습니다. 쿼리 결과를 채우려 고하는 보고서의 비즈니스 계층 클래스가 있습니다. – amnesia

답변

3

예, 당신은 완전히이 작업을 수행 할 수 있습니다.

p.swg는 익명 유형이라고하는 것을 사용했습니다. 기본적으로 쿼리 결과를 즉시 정의합니다. 이 그것을 다음과 같습니다 쿼리 구문에서

Select(r => new { type = "Ledger", ... });과 같은 식 구문에, 그의 대답에서 볼 수 있듯이 : 새로운 뒤에

from xxx in y 
select new { type = "Ledger" }; 

, 더 클래스/유형 또는 아무것도 없다. 유형도 정의되어 있지 않습니다. 그러나 그것은 자연스럽게 문자열로 컴파일됩니다. 당신이 선택이 지금 강력하게 형식화 될 것이다 당신이

public class CustomResultVM 
{ 
    //ignoring getter and setter 
    public int Id; 
    public string type; 
    public string name; 
} 

에 대한 사용자 지정 뷰 모델 클래스를 정의하고 다음과 같이 할 수있는 반면에

:

Select(r => new CustomResultVM 
{ 
    Id = r.xxx, 
    type = "Ledger", 
    Name = r.xxxx 
}); 

//query snytax 
from xxx in y 
select new CustomResultVM 
     { 
      Id = r.xxx, 
      type = "Ledger", 
      Name = r.xxxx 
     }; 

두 가지 방법이 유효하며 달려 주어진 시점과 시점에서 필요한 것.

+1

감사합니다. 감사합니다. – amnesia

3

물론 가능합니다.

var results = dbContext.Table.Select(r => new { type = "Ledger", ... }); 

을 아니면 명명 된 유형을 필요로하는 경우,이 같은 작업을해야합니다 : 그것은 조금 같을 것이다

public class UnionResult 
{ 
    string Type { get; set; } 
    ... 
} 

var results = dbContext.Table.Select(r => new UnionResult { Type = "Ledger", ... }); 
+0

+1 그가 이것이 요구 한 것이기 때문에 +1. 그러나 모 놀리 식 응용 프로그램 외부의 올바른 솔루션 인 익명 형식을 상상하기는 어렵습니다. 그것은 돌려받을 수 없다는 것입니다. –

+0

@ P.Brian.Mackey Fair 충분히. 대안으로 이름이 지정된 유형을 포함하도록 답변을 업데이트했습니다. –

+0

@ p.s.w.g. 그것은 우리 둘을 만듭니다. 내가 분명히 대답했기 때문에 대답을 연장하는 것이 좋은 생각이었다. – Marco