2010-07-27 5 views
3

je dois traduire la requête SQL suivante dans LINQ équivalentLINQ équivalent de SQL

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 

Comment traduire ce qui précède en équivalents LINQ?

+2

C'est un code SQL invalide, le 'FROM' est manquant sur la première partie de l'union. – Abel

+0

@Abel: Vous n'avez pas besoin d'une clause from, elle est parfaitement valide. – NotMe

+0

@ Abel, Non si vous l'exécutez dans Sql Server, vous obtiendrez le résultat – swetha

Répondre

1

En supposant que vous avez pris soin de l'union dans votre base de données et de récupérer vos données grâce à une vue, il pourrait être ceci:

from reports in medicalReports 
where reports.PaperStyle == "Normal" 
&& reports.PageNumber != 10000 
order by reports.DocId 
select reports 
0
var reps = from r in Medical_Reports 
       where r.PaperStyle == 'Normal' && r.PageNumber != 10000 
       order by r.DocId 
      select { DocId = r.DocId, 
        Page = ((string)(r.CustomPage == r.PageNumber) + ". " + r.Title, 
        PageNumber = r.PageNumber }; 

reps.Add({ DocId = 0, Page = "All_Forms ", PageNumber = 0 }); 

Note: le code non testé complètement. Aucune garantie

0

Testé avec une table faite à la hâte sur la base de votre SQL. J'espère que c'est ce que vous cherchez:

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 
      });