Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL的LINQ等价物_C#_Linq_Linq To Sql - Fatal编程技术网

C# SQL的LINQ等价物

C# SQL的LINQ等价物,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我必须将下面的SQL查询转换为等效的LINQ SELECT 0 AS DOCID, 'All_Forms ' as PAGE, 0 AS PAGENUMBER UNION SELECT DOCID, (CAST(IsNull(CUSTOMPAGE,PAGENUMBER) AS VARCHAR(10)) +'. '+TITLE ) AS PAGE, PAGENUMBER FROM Medical_Reports WHERE P

我必须将下面的SQL查询转换为等效的LINQ

SELECT 
    0 AS DOCID, 
    'All_Forms ' as PAGE, 
    0 AS PAGENUMBER

UNION 

SELECT 
    DOCID,
    (CAST(IsNull(CUSTOMPAGE,PAGENUMBER) AS VARCHAR(10)) +'. '+TITLE ) AS PAGE,
    PAGENUMBER FROM Medical_Reports 
WHERE
    PAPERSTYLE='Normal' 
    AND PAGENUMBER<>10000 
ORDER BY
    docid

如何将上述内容转换为LINQ等价物?

假设您已经处理了数据库中的union并通过视图检索了数据,可能是这样的:

from reports in medicalReports
where reports.PaperStyle == "Normal"
&& reports.PageNumber != 10000
order by reports.DocId
select reports

注意:完全未经测试的代码。不保证。

使用基于SQL的仓促生成的表对此进行了测试。我希望这就是你想要的:

var firstItem = new List<dynamic>() { 
    new { DocId = 0, Page = "All_Forms ", PageNumber = 0}
};

var pages = (from p1 in firstItem
             select p1).Union(
             from p2 in MedicalReports
             where p2.PaperStyle == "Normal" &&
                    p2.PageNumber != 10000
             orderby p2.DocId
             select new
             {
                 DocId = p2.DocId,
                 Page = ((p2.CustomPage != null) ? p2.CustomPage : p2.PageNumber.ToString()) + ". " + p2.Title,
                 PageNumber = p2.PageNumber
             });

这是无效的SQL,在联合体的第一部分缺少FROM。@Abel:你不需要FROM子句,它是完全有效的。@Abel,不,如果你在SQL Server中执行它,你会得到结果,好吧,那就改变了,或者我有其他SQL方言中的bug…@Abel:也许你在想Oracle的FROM DUAL子句。
var firstItem = new List<dynamic>() { 
    new { DocId = 0, Page = "All_Forms ", PageNumber = 0}
};

var pages = (from p1 in firstItem
             select p1).Union(
             from p2 in MedicalReports
             where p2.PaperStyle == "Normal" &&
                    p2.PageNumber != 10000
             orderby p2.DocId
             select new
             {
                 DocId = p2.DocId,
                 Page = ((p2.CustomPage != null) ? p2.CustomPage : p2.PageNumber.ToString()) + ". " + p2.Title,
                 PageNumber = p2.PageNumber
             });