Как смоделировать производную таблицу с помощью linq to Entities - PullRequest
0 голосов
/ 03 января 2012

Как мне смоделировать 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

Ответы [ 2 ]

2 голосов
/ 09 января 2012
  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 голосов
/ 03 января 2012

WITH(NOLOCK) невозможно достичь в LINQ-to-Entities, поэтому вы должны просто обернуть его в хранимую процедуру и вызвать его.

Обычно это вычисления, а не извлечение набора данных, поэтому они не очень подходят для Linq-to-entity. При использовании EF вычисления должны выполняться в вашем приложении, поэтому вы должны вызывать четыре подзапроса отдельно и вычислять результат в вашем приложении. В качестве альтернативы вы можете использовать хранимую процедуру.

...