简体   繁体   English

如何在LINQ查询中对字段条件进行检查?

[英]How to perform a check on a field condition in a LINQ query?

I have a LINQ query that performs some joins on other tables, but I need to perform a check on a Join condition in order to know if a field is null, because if it is null I have to join with the same table but on another field. 我有一个LINQ查询,它在其他表上执行一些联接,但是我需要对一个Join条件执行检查,以便知道某个字段是否为空,因为如果为空,则我必须与同一个表联接,但要在另一个表上联接领域。

I have this LINQ query : 我有这个LINQ查询:

var fasi = _fasi.Split(';').Select(n => short.Parse(n)).ToList();
listaDoc = (
    from Documenti in db.Documenti
    join Tipi in db.Tipi
        on new { C = (int)Documenti.Classe, C_Tipo = Documenti.CTipo }
        equals new { Tipi.C, Tipi.C_Tipo } into Tipi_join
    from Tipi in Tipi_join.DefaultIfEmpty()
    join Stipi in db.Stipi
        on new { C = Documenti.Classe, C_STipo = Documenti.CSTIpo }
        equals new { Stipi.C, Stipi.C_STipo } into Stipi_join
    from Stipi in Stipi_join.DefaultIfEmpty()
    join PathClassi_Web in db.PathClassi_Web on new { cod_class = Documenti.Classe } equals new { cod_class = PathClassi_Web.cod_class } into PathClassi_Web_join
    from PathClassi_Web in PathClassi_Web_join.DefaultIfEmpty()
    where
        (fasi).Contains((short)Documenti.Stato)
    select new
    {
        Documenti.ID,
        Documenti.Data,
        Documenti.Descrizione,
        Documenti.DAL,
        Documenti.AL,
        Documenti.Stato,
        Documenti.NomeDoc,
        Classe = (int?)Documenti.Classe,
        Documenti.CTipo,
        Documenti.CSTIpo,
        Documenti.SiglaRed,
        Documenti.Stipula,
        Documenti.DataCmp,
        Documenti.Regione,
        Documenti.NumDoc,
        Documenti.Destinazione,
        Documenti.DataStampa,
        Documenti.Ext,
        GRP2 = Tipi.GRP2,
        DESCRIZ = Stipi.Descriz,
        DESCR_CLASS = PathClassi_Web.descr_class
});

I need to know if Tipi.C_Tabella is null. 我需要知道Tipi.C_Tabella是否为空。 If not, I will join Documenti and Tipi "on Tipi.C_Tabella = Documenti.CTipo , but if it is null I will join Documenti and Tipi on Tipi.C_Tipo = Documenti.CTipo . 如果不是,我将在Tipi.C_Tabella = Documenti.CTipo上加入DocumentiTipi ,但如果为空,我将在Tipi.C_Tipo = Documenti.CTipo上加入DocumentiTipi

How can I do this by modifying my LINQ query written above? 如何通过修改上面编写的LINQ查询来做到这一点?

from Documenti in db.Documenti
join Tipi in db.Tipi
on new { C = (int)Documenti.Classe, C_Tipo = Documenti.CTipo }
equals new { Tipi.C, Tipi.C_Tabella ?? Tipi.C_Tipo } into Tipi_join

OR 要么

from Documenti in db.Documenti
from Tipi in db.Tipi
where (Tipi.C_Tabella ?? Tipi.C_Tipo) = Documenti.CTipo

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM