2012-01-03 54 views
0

我如何用LINQ來模擬Derived Table如何模擬衍生表與LINQ到實體

考慮下面的代碼:

SELECT * FROM (SELECT * FROM Mytbl) AS tmp WHERE tmp.ID=1 

我如何使用LINQ寫的嗎?

感謝

編輯1:

如何將其轉換爲LINQ?:

select 
convert(decimal(10,1), ROUND(A.c2*100,8)), 
convert(decimal(10,1), ROUND(A.c3*100,8)) 
from 
(
SELECT 
    (
     SELECT CONVERT(INT, COUNT(ID)) 
     FROM tbl 
     WHERE (col06 >= @param_Min and col06 <= @param_Max) 

    ) 
    / 
    (
     SELECT CONVERT(INT, COUNT(ID)) 
     FROM tbl 
     WHERE (col06 >= 10)      
    ) as c2 
    (
     SELECT CONVERT(INT, COUNT(ID)) 
     FROM tbl 
     WHERE (col06 >= @param_Min and col06 <= @param_Max) 
      AND (col03 = 1) 
    ) 
    / 
    (
     SELECT CONVERT(INT, COUNT(ID)) 
     FROM tbl 
     WHERE (col06 >= 10) AND (col03 = 1)  
    ) as c3 
) AS A 
+1

你應該展現真實的例子,當你想使用它,因爲你當前的例子是一樣的' SELECT * FROM MyTbl WHERE ID = 1'這使您的問題得到解決。 – 2012-01-03 10:42:39

+0

是這是一個簡單的例子。我更新我的問題 – Arian 2012-01-03 10:47:15

回答

2
  1. **SELECT * FROM (SELECT * FROM Mytbl) AS tmp WHERE tmp.ID=1**

LINQ的版本

var result = db.MyTbl.Where(x => x.ID == 1); 

2.

var query = 
       let c1= from b in db.MyTbl 
            where b.col06 >= @param_Min//some condition 
            select b.ID 
       let c2= from b in db.MyTbl 
            where b.col06 >= 10//some condition 
            select b.ID 
       let c3=from b in db.MyTbl 
            where b.col06 >= @param_Min//some condition 
            select b.ID 

       select new 
       { 
        c2.ID,//perform Round and other operation on this 
        c3.ID//perform Round and other operation on this 

       }; 
+0

你的代碼有錯誤,請糾正它們 – Arian 2012-01-09 11:40:40

0

WITH(NOLOCK)是不可能的LINQ到實體來實現,所以你應該只是包裝它在存儲過程中調用它。

通常這是計算而不是數據集檢索,所以它不是很適合Linq-to-entities。使用EF計算時,應該在應用程序中完成,因此應該分別調用四個子查詢並在應用程序中計算結果。作爲替代,您可以使用存儲過程。

+0

我刪除了'WITH NOLOCK'.You對,但我認爲EF是通用的,我們可以創建這些基本的查詢。不是嗎? – Arian 2012-01-03 11:00:11

+0

沒有EF不是通用的。 EF是加載和保存實體並在應用程序中使用它們的特定目的。 – 2012-01-03 11:22:50