2016-06-09 3 views
1

이를 고려Linq에 - 투 - 엔티티 확장 문자열 연결

var query = (from u in entity.Users 
      select new 
        { 
         FullName = u.FirstName + " " + u.LastName 
        } 
      ); 
잘 작동

,하지만 내가하고 싶은 것은 이것이다 : 나는 (u.FirstName + " " + u.LastName)

을 반환 메타 데이터를 사용하고

var query = (from u in entity.Users 
       select new 
       { 
        FullName = u.FullName 
       } 
      ); 

[NotMapped] 
public string FullName 
{ 
    get 
    { 
     return FirstName + " " + LastName; 
    } 
} 

하지만 오류가 발생합니다.

The specified type member 'FullName' is not supported in LINQ to Entities.

내가 쿼리를 구체화하면 제대로 작동하지만 그럴 필요가 없다는 것을 안다. db 수준에서 수행하고 싶습니다. 따라서 최선의 방법은 무엇입니까? 가능합니까? 아니면 내가 모든 시간이 (u.FirstName + " " + u.LastName)에게

추신을 할 필요가 :

public static Expression<Func<User, string>> FullName() 
{ 
    return u => u.FirstName + " " + u.LastName; 
} 

그것은 DB 돈 때문에 작동하지 않습니다 당신에게

+0

모델을 사용하는 경우 첫 번째 방법은 UDF를 만들 수 있습니다. http://stackoverflow.com/questions/20131632/calling-a-sql-user-defined-function-in-a-linq-query – Tsayper

+1

표현 방식을 사용해야합니다. 작업. 어떻게 사용하려고했는지 보여줄 수 있습니까? –

+0

firstName과 lastname을 채우는 경우 FullName 속성에 액세스 할 때 전체 이름이 계산되고 Fullname 속성 만 가져 오는 경우 어떻게 값을 설정합니까 – Eldho

답변

1

감사 (나를 위해 작동하지) : 나는이 시도했습니다 서버 측 방법을 실행하는 방법을 알지 못합니다. 가능한 옵션 :

Translation library:

private static readonly CompiledExpression<Customer, string> fullNameExpression 
    = DefaultTranslationOf<User>.Property(e => e.FullName) 
       .Is(e => e.FirstName + " " + e.LastName); 

[NotMapped] 
public string FullName 
{ 
    get { return fullNameExpression.Evaluate(this); } 
} 

var q = dbContext.Users.Select(u => new 
    { 
     FullName = u.FullName 
    }).WithTranslations(); 

DelegateDecompiler library:

[NotMapped] 
[Computed] 
public string FullName 
{ 
    get { return FirstName + " " + LastName; } 
} 


var q = dbContext.Users.Select(u => new 
    { 
     FullName = u.FullName 
    }).Decompile(); 

캡슐화 :

public static Expression<Func<MyEntity, MyDto>> SelectFullNames() 
{ 
     return e => new MyDto{} { Fullname = e.FirstName + " " + e.LastName; 
} 

var queryable = dbConext.Users.Select(SelectFullNames()); 

면책 조항 - 아니 날에 의해 실제-scenarions에 사용되는 라이브러리.

관련 문제