2012-11-12 44 views
1

我有一組5個參數,一個範圍的兩個上限和兩個下限以及實際值。在我的Linq-Entites查詢中,我希望能夠返回一個整數,取決於值落在範圍內的限制範圍內。Linq to Entities函數返回整數參數是否在一定範圍內

例如:

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; 

查詢將是:

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

該查詢被調用在服務器側,並且將數據傳遞迴視圖模型。 這可以通過存儲函數或sql函數來實現嗎?

+1

那麼問題是什麼? – 2kay

+2

此外,您的查詢將無法正常工作,因爲linq實體查詢提供程序不知道如何翻譯'CalculateWhereInRange' – 2kay

+0

這是我的問題 - 我該怎麼做?存儲功能? SQL數據庫上的函數?我無法想象如何使用現有的工具實現這一目標。 – xhedgepigx

回答

0

爲項目的類本身添加一個方法GetRangeStatus。然後你可以使用它像這樣

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; 

沒有必要通過任何參數,因爲所有需要的值存儲在item

+0

我可以向DomainService元數據類添加方法嗎? – xhedgepigx

+0

也許如果它是一個部分類?否則,您可以將其作爲擴展方法。 –

0

Store中的五個參數:

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

五你的模型類的屬性,然後在模型的構造可以應用CalculateWhereInRange()的邏輯

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

我想在將數據傳回視圖模型之前獲取值(這將全部發生在域服務器端,而不是客戶端) – xhedgepigx

+0

啊,我明白了。如果我沒記錯的話,你可以使用(if x)?你的Linq2Sql狀態分配中的y:z邏輯,但它會非常難看 –

+0

是的,我可以看到它會非常混亂,試圖遠離它! – xhedgepigx

相關問題