我有一个数据库,其中一些ForeignKeys可以为NULL。所以我选择了左连接数据,就像我在其他一些帖子中找到的一样。
var query =
from z in context.zeichnungen
join f in context.fremdschlüssel.DefaultIfEmpty() on z.ZeichnungID equals f.ZeichnungID
join t in context.tags.DefaultIfEmpty() on f.TagID equals t.TagID into tz
from t in tz.DefaultIfEmpty()
join s in context.status.DefaultIfEmpty() on z.StatusID equals s.StatusID into sz
from s in sz.DefaultIfEmpty()
join a in context.artikelbezeichnungen.DefaultIfEmpty() on z.ArtikelbezeichnungID equals a.ArtikelbzeichnungID into az
from a in az.DefaultIfEmpty()
join b in context.sammellbemerkungen on z.SammelberkungID equals b.SammelbemerkungID
join m in context.sachmerkmale on z.SachmerkmalID equals m.SachmerkmalID into mz
from m in mz.DefaultIfEmpty()
where (zeichnungsnummer == "" || z.Zeichnungsnummer.Contains(zeichnungsnummer)) &&
(index == "" || index == z.Index) && (tag == "" || t.Tag_Text == tag) &&
(artikelbezeichnung == "" || artikelbezeichnung == a.Artikelbezeichnung) &&
(status == "" || status == s.Status_Bezeichnung) && (mmsSachmerkmal == "" || mmsSachmerkmal == m.Sachmerkmal) &&
(doktyp == "" || doktyp == z.Dokumententyp) && (dateiendung == "" || dateiendung == z.Dateiendung) &&
(z.Datum >= startDate.Date && z.Datum <= endDate.Date) && (status == "" || status == s.Status_Bezeichnung)
select new
{
f,
z,
t,
s,
a,
b,
m
};
但是select仅在填充外键时显示数据。有人可以解释我做错了吗?
更新
这是从调试中选择。
FROM
zeichnungen
ASExtent1
INNER JOINfremdschlüssel
ASExtent2
ONExtent1
。ZeichnungID
=Extent2
。ZeichnungID
INNER JOINtags
ASExtent3
ONExtent2
。TagID
=Extent3
。TagID
LEFT OUTER JOINstatus
ASExtent4
ONExtent1
。StatusID
=Extent4
。StatusID
LEFT OUTER JOINartikelbezeichnungen
ASExtent5
ONExtent1
。ArtikelbezeichnungID
=Extent5
。ArtikelbzeichnungID
INNER JOINsammellbemerkungen
ASExtent6
ONExtent1
。SammelberkungID
=Extent6
。SammelbemerkungID
LEFT OUTER JOINsachmerkmale
ASExtent7
ONExtent1
。SachmerkmalID
=Extent7
。SachmerkmalID