我有这个SQL查询,它适用于我的目的:
SELECT [Documenti].[ID]
,[Documenti].[Data]
,[Documenti].[Descrizione]
,[Documenti].[DAL]
,[Documenti].[AL]
,[Documenti].[Stato]
,[Documenti].[NomeDoc]
,[Documenti].[Classe]
,[Documenti].[CTipo]
,[Documenti].[CSTIpo]
,[Documenti].[SiglaRed]
,[Documenti].[Stipula]
,[Documenti].[DataCmp]
,[Documenti].[Regione]
,[Documenti].[NumDoc]
,[Documenti].[Destinazione]
,[Documenti].[DataStampa]
,[Documenti].[Ext]
,[Tipi].GRP2
FROM [Documenti]
LEFT JOIN Tipi ON Tipi.C = [Documenti].Classe AND Tipi.C_Tipo = [Documenti].CTipo
LEFT JOIN STipi ON STipi.C = [Documenti].Classe AND STipi.C_STipo = [Documenti].CSTipo
where [Documenti].Stato IN (4,2,3)
特别是我需要实现SELECT IN子句,因为没有它我的LINQ代码工作正常。我的LINQ查询如下:
IQueryable listaDoc = null;
string _fasi = "4;2;3";
var fasi = _fasi.Split(';').Select(n => short.Parse(n)).ToList();
listaDoc = (from DOC in db.Documenti
from subdoc in db.Tipi.Where(j => j.C_Tipo == DOC.CTipo && j.C == DOC.Classe.Value).DefaultIfEmpty()
from subdoc2 in db.Stipi.Where(j => j.C_STipo == DOC.CSTIpo && j.C == DOC.Classe.Value).DefaultIfEmpty()
from subdoc3 in db.PathClassi_Web.Where(j => j.cod_class == DOC.Classe).DefaultIfEmpty()
where fasi.Contains(DOC.Stato.Value)
select new
{
DOC.ID,
DOC.Data,
DOC.Descrizione,
DOC.DAL,
DOC.AL,
DOC.Stato,
DOC.NomeDoc,
DOC.Classe,
DOC.CTipo,
DOC.CSTIpo,
DOC.SiglaRed,
DOC.Stipula,
DOC.DataCmp,
DOC.Regione,
DOC.NumDoc,
DOC.Destinazione,
DOC.DataStampa,
DOC.Ext,
GRP2 = subdoc == null ? string.Empty : subdoc.GRP2,
DESCRIZ = subdoc2 == null ? string.Empty : subdoc2.Descriz,
DESCR_CLASS = subdoc3 == null ? string.Empty : subdoc3.descr_class
});
但它返回0我的结果。我的LINQ查询有什么问题才能达到上述纯SQL查询的相同结果?