Соединить несколько таблиц без повторения тех же данных - PullRequest
0 голосов
/ 14 января 2019

У меня есть две таблицы, Таблица обратной связи и таблица шагов. Каждый отзыв имеет несколько шагов. Если я использую LINQ с методом соединения, он возвращает одно и то же количество элементов шага (obj) в FeedbackViewModel, и каждый из них содержит только 1 единственный шаг. Я имею в виду очень похоже на возврат SQL.

FeedbackViewModel[0]{FeedbackID = 1,FeedbackName="NameA", Steps{Step1}}
FeedbackViewModel[1]{FeedbackID = 1,FeedbackName="NameA", Steps{Step2}}
FeedbackViewModel[2]{FeedbackID = 1,FeedbackName="NameA", Steps{Step3}}

НО мне нужен только один объект FeedbackViewModel, который содержит много шагов.

FeedbackViewModel[0]{FeedbackID = 1,FeedbackName="NameA", Steps{Step1, Step2, Step 3 etc..}

Я могу сделать это foreach Loop, но это не выглядит профессионально.

Спасибо за помощь

public class Feedback 
{
    public int FeedbackID { get; set; }
    public string FeedbackName { get; set; }        
}

public class StepModel
{
    public int StepID { get; set; }
    public int FeedbackID { get; set; } = 0;
    public int StepNumber { get; set; }
    public string StepDetail { get; set; }
    public virtual Feedback FeedBack { get; set; }
}

public class FeedbackViewMODEL
{
    public int FeedbackID { get; set; }
    public string FeedbackName { get; set; }
    public List<StepModel> Steps { get; set; }
}


var quote = from feed in FeedBacks 
           join stp in StePs on feed.FeedbackID equals stp.FeedbackID
           where feed.FeedbackID == id
           select new FeedbackViewMODEL
                    {
                        Step = stp;
                    }

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Использование объединения группы LINQ объединит все соответствующие шаги:

var quote = from feed in FeedBacks
            where feed.FeedbackID == id
            join stp in StePs on feed.FeedbackID equals stp.FeedbackID into stpj
            select new FeedbackViewMODEL {
                FeedbackID = feed.FeedbackID,
                FeedbackName = feed.FeedbackName,
                Steps = stpj.ToList()
            };
0 голосов
/ 14 января 2019

Я думаю, вам следует оставить внешнее соединение.

из фида в отзывах присоедините stp пошагово к feed.FeedbackID, равному stp.FeedbackID, в результат где feed.FeedBackID == id и result.DefaultIfEmpty ()

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