J'ai la requête LINQ suivante:EF4 ajoutant est la clause nulle sur la clause where
var fileDocuments = (
from doc in fileUploads
from invoice in
(
from inv in _dbContext.SupplierInvoiceHeaders
where inv.InvoiceDocumentId == doc.ID || inv.JobSheetInvoiceId == doc.ID
select inv
).DefaultIfEmpty()
join pos in _dbContext.PurchaseOrders on invoice.PurchaseOrder.PurchaseOrderId equals pos.PurchaseOrderId into poss
from po in poss.DefaultIfEmpty()
join hdf in _dbContext.HelpDeskFaults on po.HelpdeskFaultId equals hdf.ID into hdfpo
from hs in hdfpo.DefaultIfEmpty()
join store1 in _dbContext.Stores on hs.StoreID equals store1.ID into hsf
from hdfStore in hsf.DefaultIfEmpty()
join js in _dbContext.JobSheets on invoice.SupplierInvoiceHeaderId equals js.SupplierInvoiceHeaderID into jss
from jobSheets in jss.DefaultIfEmpty()
join ch in _dbContext.ChildProjects on po.ChildProjectId equals ch.ID into chs
from childProjects in chs.DefaultIfEmpty()
join ph in _dbContext.ProjectHeaders on childProjects.ProjectHeaderID equals ph.ID into phs
from projectHeaders in phs.DefaultIfEmpty()
join ppmsl in _dbContext.PpmScheduleLines on projectHeaders.PPMScheduleRef equals ppmsl.ID into ppsmsls
from ppmScheduleLines in ppsmsls.DefaultIfEmpty()
join ss2 in _dbContext.Stores on ppmScheduleLines.StoreID equals ss2.ID into ssts
from store2 in ssts.DefaultIfEmpty()
select new
{
doc.ID,
JobSheetId = jobSheets.DocumentID,
doc.Name,
doc.DateCreated,
doc.StoreID,
StoreName = doc.Store.Name,
DocumentType = doc.DocumentType.Name,
doc.DocumentTypeID,
HelpDeskFaultStoreName = hs.Store.Name,
DocStoreName = doc.Store.Name,
PPMScheduleLinesStoreName = ppmScheduleLines.Store.Name,
PIR = invoice.PurchaseInvoiceReference
});
fileDocuments = fileDocuments.Where(x => x.PIR == jobSearchParams.PIR);
La clause where générée ressemble à ceci:
WHERE ([Extent2].[fld_str_PIR] = @p__linq__0) OR (([Extent2].[fld_str_PIR] IS NULL) AND (@p__linq__0 IS NULL))
Je ne comprends pas pourquoi il ajoute les clauses IS NULL.
Est-ce que de toute façon je peux juste générer une vérification d'égalité sans la clause IS NULL non désirée? – dagda1
S'il est de type nullable (par exemple chaîne, int? Etc) - j'en doute. _Vous pourriez savoir que cela ne peut jamais être nul, mais EF ne peut pas le savoir et je ne suis pas sûr qu'il existe un moyen de lui dire qu'il ne peut pas être nul. Si le type est nullable (int?), Vous pouvez d'abord affecter sa valeur à une variable locale non nulle du même type (int). Cependant, quel genre de problème avez-vous avec cela? – Evk
Je ne comprends pas tout ce que je veux faire est de générer une clause where comme: '' 'WHERE (. [Extent2] [fld_str_PIR] = @ p__linq__0))' '' '' 'jobSearchParams.PIR'' 'ne sera jamais nul. – dagda1