Преобразование T-SQL в Linq - PullRequest
0 голосов
/ 18 апреля 2011

Я новичок в LINQ, и меня попросили обновить существующее унаследованное решение до Linq для сущностей в EF4.1.

Модель EF здесь http://i53.tinypic.com/2h6sy0m.png

Я могу справиться с основными запросами, но обширные, такие как ниже, вызывают большие головные боли. Я был бы признателен за любой совет, который вы могли бы дать при конвертации в Linq (Return Me.ObjectContext. ** ....)

SELECT     tblInspectionFailures.ID, vwBusinessUnit.Name, vwBuilds.BuildNo, tblFaultArea.Description AS [Fault Area], tblFault.Description AS Fault, 
                      tblFaultsCodes.Description AS [Fault Code], tblFaultsCodesDetail.Description AS [Fault Code Detail], 
                      tblFaultCode_AuditScores.Description AS [Audit Score], tblInspectionFailures.Comment, tblInspectionFailures.ShortagePart, 
                      tblInspectionFailures.CreatedDate, vwUsers.DisplayName AS [Created By], tblInspectionFailures.IsAdhocTest, tblInspectionFailures.FixedDate
FROM         tblInspectionFailures INNER JOIN
                      tblFaultArea ON tblFaultArea.ID = tblInspectionFailures.FaultAreaID INNER JOIN
                      vwBuilds ON tblInspectionFailures.BuildID = vwBuilds.ID INNER JOIN
                      tblFaultsCodes ON tblInspectionFailures.FaultCodeID = tblFaultsCodes.ID INNER JOIN
                      vwBusinessUnit ON tblInspectionFailures.BUID = vwBusinessUnit.ID INNER JOIN
                      vwUsers ON tblInspectionFailures.CreatedBy = vwUsers.ID INNER JOIN
                      tblFault ON tblInspectionFailures.FaultID = tblFault.ID LEFT OUTER JOIN
                      tblFaultCode_AuditScores ON tblInspectionFailures.AuditScoreID = tblFaultCode_AuditScores.ID LEFT OUTER JOIN
                      tblFaultsCodesDetail ON tblInspectionFailures.FaultCodeDetailID = tblFaultsCodesDetail.ID
WHERE     (tblInspectionFailures.FaultAreaID IN (28, 72, 78)) 
            AND (tblInspectionFailures.CreatedDate BETWEEN CONVERT(DATETIME, '2011-04-01 00:00:00', 102) AND GETDATE())

1 Ответ

0 голосов
/ 18 апреля 2011

SQL-запрос сложен и имеет много внутренних и внешних объединений. Этот ответ не принимает все это во внимание. Однако в поставщиках LINQ (таких как Entity Framework) приятно то, что они могут подразумевать отношения соединения непосредственно из модели. Я пишу запросы LINQ ежедневно, и иногда они могут быть довольно сложными, но мне вряд ли когда-нибудь понадобится явное объединение в моих запросах LINQ. Если у вас есть модель базы данных проектирования и модель Entity Framework, вы можете просто «расставить все точки» без использования оператора LINQ join.

Хватит говорить. Вы следующий запрос в качестве отправной точки. Он получает все сбои из базы данных в заданном диапазоне данных и для заданных областей сбоев. Вы можете расширить его, чтобы вернуть именно то, что вам нужно, но я надеюсь, что это поможет в качестве отправной точки.

var faultAreas = new[] { 28, 72, 78 };
var minDate = new DateTime(2011, 04, 01);
var maxDate = DateTime.Now;

var failures =    
    from failure in context.InspectionFailures
    where faultAreas.Contains(failure.FaultAreaID)
    where failure.CreatedDate >= minDate
    where failure.CreatedDate <= maxDate
    select failure;

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...