2012-11-12 3 views
1

범위 및 실제 값의 두 개의 상한 및 하한 두 세트의 매개 변수가 있습니다. Linq-to-Entites 쿼리에서이 값의 범위 내 범위에 따라 정수를 반환하고 싶습니다. 예를 들어Linq to Entities 정수 매개 변수가 특정 범위에 있는지 여부를 반환하는 함수

는 : 쿼리가 서버 측에서 호출되고

var list = from item in ObjectContext.Plants 
      where item.ID == ID 
      select new Model() 
      { 
       ID = item.ID, 
       Name = item.Name, 
       Status = CalculateWhereInRange(item.numericValue, item.UpperHighLimit, item.LowerHighLimit, item.UpperLowLimit, item.LowerLowLimit) 
      }; 
return list; 

EDIT하고 다시 데이터를 전달한다 :

if (value > highest limit || value < lowest limit) return 6; 
if (value < highest limit && value > 2nd high limit || value > lowest limit && value < 2nd lowest limit) return 5; 
else if (value < 2nd highest limit && value > 2nd lowest limit) return 4; 

쿼리가 될 뷰 모델. 저장 함수 또는 SQL 함수로이를 수행 할 수 있습니까?

+1

그래서 무엇이 문제입니까? – 2kay

+2

linq-to-entities 쿼리 공급자가'CalculateWhereInRange'를 번역하는 방법을 모르기 때문에 쿼리가 작동하지 않습니다 – 2kay

+0

그건 내 질문입니다 - 어떻게하면됩니까? 저장된 함수? 내 DB에 SQL 기능? 사용 가능한 도구를 사용하여 이것이 실제로 어떻게 달성 될 수 있는지 나는 생각할 수 없습니다. – xhedgepigx

답변

0
처럼 CalculateWhereInRange()의 논리

을 적용 할 수 있습니다

항목의 클래스 자체에 GetRangeStatus 메서드를 추가합니다. 그럼 당신은 필요한 모든 값이 item에 저장되기 때문에, 어떤 매개 변수를 전달할 필요가 없습니다이

var list = from item in ObjectContext.Plants 
      where item.ID == ID 
      select new Model() 
      { 
       ID = item.ID, 
       Name = item.Name, 
       Status = item.GetRangeStatus() // <==== 
      }; 
return list; 

처럼 사용할 수 있습니다.

+0

수 있습니다. DomainService 메타 데이터 클래스에 메서드를 추가 할 수 있습니까? – xhedgepigx

+0

아마도 부분 클래스일까요? 그렇지 않으면 확장 메소드로 만들 수 있습니다. –

0

스토어 당신의 5 개 개의 매개 변수 : 모델 클래스에

item.numericValue, item.UpperHighLimit, item.LowerHighLimit, item.UpperLowLimit, item.LowerLowLimit 

다섯 특성은 다음 모델의 생성자에서 당신은

var list = from item in ObjectContext.Plants 
    where item.ID == ID 
    select new Model() 
     { 
      ID = item.ID, 
      Name = item.Name, 
      NumericValue = item.numericValue, 
      UpperHighLimit = item.UpperHighLimit 
      LowerHighLimit = item.LowerHighLimit 
      UpperLowLimit = item.UpperLowLimit 
      LowerLowLimit = item.LowerLowLimit 
     }; 



    public class Model() 
    { 
      public int UpperHighLimit {get;set;} //And all the others 
      public Model() 
      { 
       //Do Calculations here with your 5 properties 
      } 
    } 
+0

데이터를 viewmodel로 다시 전달하기 전에이 값을 가져오고 싶습니다 (이 모든 것이 도메인 서버 쪽에서 일어날 것입니다. 클라이언트 측) – xhedgepigx

+0

아, 알겠습니다. 내가 기억한다면, (if x)를 사용할 수 있습니까? y : Linq2Sql 상태 할당 내에서 z 논리,하지만 정말 못생긴다 –

+0

예, 나는 그것이 매우 지저분 해 보일 것입니다. – xhedgepigx