Преобразовать этот SQL-запрос в LINQ Query - PullRequest
2 голосов
/ 18 августа 2011

Мне нужно преобразовать этот SQL-запрос в LINQ Query, а также мне нужно предоставить свойства SQL Select:

SELECT Problem.ProblemID, ProblemFactory.ObjectiveID, Objective.Name, ProblemFactory.Time, ProblemType.ProblemTypeName, ProblemFactory.OperationID, 
                     ProblemFactory.Range1ID, ProblemFactory.Range2ID, ProblemFactory.Range3ID, ProblemFactory.Range4ID, 
                     ProblemFactory.MissingNumber
FROM Problem INNER JOIN ProblemFactory ON Problem.ProblemFactoryID = ProblemFactory.ProblemFactoryID
             INNER JOIN ProblemType ON ProblemFactory.ProblemTypeID = ProblemType.ProblemTypeID
             INNER JOIN Objective ON Objective.ObjectiveID = ProblemFactory.ObjectiveID

ОБНОВЛЕНИЕ 1:

Вот что у меня есть:

        var query = from problem in dc.Problem2s
                    from factory
                    in dc.ProblemFactories
                         .Where(v => v.ProblemFactoryID == problem.ProblemFactoryID)
                         .DefaultIfEmpty()
                    from ...

И я использую этот пример: Каков синтаксис внутреннего соединения в LINQ to SQL?

Ответы [ 2 ]

3 голосов
/ 18 августа 2011

Как то так?

var query =
    from p in ctx.Problem
    join pf in ctx.ProblemFactory on p.ProblemFactoryID equals pf.ProblemFactoryID
    join pt in ctx.ProblemType on pf.ProblemTypeID equals pt.ProblemTypeID
    join o in ctx.Objective on pf.ObjectiveID equals o.ObjectiveID
    select new
    {
        p.ProblemID,
        pf.ObjectiveID,
        o.Name,
        pf.Time,
        pt.ProblemTypeName,
        pf.OperationID, 
        pf.Range1ID,
        pf.Range2ID,
        pf.Range3ID,
        pf.Range4ID, 
        pf.MissingNumber,
    };

Но что вы подразумеваете под "свойствами SQL Select"?

0 голосов
/ 18 августа 2011

Одним из преимуществ ORM, таких как Linq-to-SQL, является то, что нам не нужно выравнивать наши данные, чтобы извлечь их из базы данных.Если вы сопоставите свои объекты в конструкторе (то есть, если у вас сопоставлены их отношения), вы сможете получить только Problems и затем получить соответствующие свойства, связанные с ними ...

var problems = from problem in dc.Problem2s select problem;

foreach (var problem in problems)
{
    // you can work with the problem, its objective, and its problem type.
    problem.DoThings();
    var objective = problem.Objective;
    var type = problem.ProblemType;    
}

Таким образомвы сохраняете логическую структуру данных на своем уровне данных, а не анонимные типы, которые не могут быть легко переданы.

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