2011-02-23 2 views
1

LINQ 테이블 (엔티티)을 함수에 매개 변수로 보내서 select {}에 값을 가져 오려고합니다. 목적은 테이블/엔티티의 여러 속성을 기반으로 값을 반환하는 것이고 반환 값을 결정하는 모든 논리를 LINQ 문에 포함하지는 않습니다. 기본적으로 'value = GetValue (tbl)'라인이 가능합니까? 엔티티에함수에 LINQ 테이블을 전달할 수 있습니까?

Public class MyClass 
{ 
    public int value { get; set; } 
} 

//Some General function to determine return value from multiple properties 
Private int GetValue(MyEntity cls) 
{ 
    if (cls.var1 == 1) 
     return var2; 
    if (cls.var1 == 2) 
     return cls.var2 - cls.var3; 

    return -1; 
} 

Public List<MyClass> GetStuff(int iType) 
{  
    List<MyClass> myClass = (from tbl in context.MyEntity 
          where tbl.MyType == iType 
          select new MyClass 
          { 
           value = GetValue(tbl) 
          }).ToList<MyClass>(); 
    return myClass; 
} 

답변

1

LINQ는 당신이 그냥 SQL로 변환하는 방법을 알고있는 기능과 표현을 사용해야 있도록 서버에서 실행되는 해당 SQL 쿼리에 전체 LINQ 쿼리를 변환하도록 설계되었습니다. 임의 함수를 호출 할 수는 없습니다.

- 이것은 LINQ 쿼리 내부에서 계산 논리를 다시 작성하여 해결할 수 있습니다. 이것은 원하지 않는 것을 말합니다.

다른 솔루션은 계산할 데이터 속성 (var1, var2, var3, ...)에 의존하는 계산 된 속성을 MyClass에 추가하는 것입니다.

-http://daniel.wertheim.se/2011/02/07/c-clean-up-your-linq-queries-and-lambda-expressions/ 등의 기술을 사용하여 LINQ 쿼리 외부의 중앙 위치에 논리를 배치 할 수 있습니다.

+0

내가 겪고있는 문제는 임의의 함수를 호출하지 않고 '테이블'과 함께 임의의 함수를 호출하는 것입니다. 내 희망은 함수에 매개 변수로 모든 속성을 보내는 대신 (또는 앞에서 언급 한 것처럼 Linq 문에서 논리를 처리하는) '개체'로 '테이블'을 보내야했습니다. – user606934

+0

수정 ... 임의의 함수를 사용할 수없는 것으로 보입니다. 도와 주셔서 감사합니다, 모하메드! – user606934

관련 문제