2011-02-23 91 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到實體設計到整個LINQ查詢轉換爲在服務器上運行,所以你應該只使用功能和表達,它知道如何轉換成SQL等效的SQL查詢。你不能只調用任意函數。

- 這可以通過在LINQ查詢中重寫您的計算邏輯來解決,這是您提到的不需要的東西。

- 另一種解決方案是將計算的屬性添加到MyClass,這些屬性依賴於要計算的數據屬性(var1,var2,var3,...)。

- 您可以使用此博客文章中提到的技術:http://daniel.wertheim.se/2011/02/07/c-clean-up-your-linq-queries-and-lambda-expressions/ 將您的邏輯置於LINQ查詢之外的中心位置。

+0

我遇到的問題不是調用任意函數,而是使用'table'調用任意函數。我希望將'table'作爲'object'發送,而不是將所有屬性作爲參數發送給函數(或者像我之前提到的那樣處理Linq語句中的邏輯)。 – user606934 2011-02-27 18:38:44

+0

更正...看來我不能使用任意函數。感謝你的幫助,穆罕默德! – user606934 2011-02-28 15:56:04

相關問題