2017-05-15 1 views
1

Linq to Entities에서 "select"절의 결과를 수정하기 위해 표준 C# 메서드를 사용할 수 없으므로 표준 함수가 필요합니다. Linq to select에서 엔터티 사용자 지정 함수

CoreEntities.Contracts.Select(
c=> new { 
    c.Name, 
    c.Type, 
    Role = MapToRole(c)); 

private string MapToRole(Contract contract) { 
    switch(contract.Type) { 
     case: CTypes.Main: return "somerole1";break; 
     case: CTypes.Secondary: return "somerole2";break; 
     // ... 
     default: break; 
    } 

    return "none"; 
} 

은 "MapToRole"

그냥 LINQ 쿼리를 declutter하기 위해 만든 C#을 방법 :

나는 같은 쿼리를 호출해야합니다.

Entity Framework "linq to Entity"파서에서 허용되는 사용자 지정 C# 함수를 만드는 방법이 있습니까?

쿼리 필터에 대한 해결책을 찾았지 만 데이터 서식에는 해결책이 없습니다.

+0

MapToRole 메서드를 질문에 추가 할 수 있습니까? – Oliver

+0

MapToRole에는 간단한 if/else/switch 문이 있습니다. –

+0

MapToRole을 lamba 표현식으로 변환 할 수 있다면 (조건 연산자 등 사용) LINQKit을 사용하여 람다를 쿼리에 매핑 할 수 있습니다. – NetMage

답변

2

단순한 변환이므로 제공자가 번역해야 할 이유가 없습니다. Select() 앞에 단순히 AsEnumerable()을 추가하여 공급자로부터 귀하의 투영을 "분리"하는 것이 좋습니다.

또는 데이터 형식에 CTypes 속성이 있고 모델에서 해당 데이터 형식을 변환하는 메서드/속성을 사용할 수 있습니다. 공급자에서 때문에 적은 데이터 - 응용 프로그램 계층이 특정 변환을 수행 보조 노트로서


경우에만 열거 값이 아닌 문자열을 당기는하고 있다는 것을 의미한다.

+0

CTypes 속성을 내 모델에 추가하면 Linq to 엔터티 예외가 발생합니다. 또한이 속성은 AutoMapper를 사용하여 다른 모델에 매핑됩니다. –

관련 문제