Получить коллекцию результатов двух дочерних таблиц, соединенных одной родительской таблицей в linq - PullRequest
0 голосов
/ 15 мая 2018

У меня есть 3 объекта: Surveys, Batch и Removed, где Surveys является родительской таблицей, а два других связаны с Surveys с внешними ключами.

public class Surveys
{
    public int TireID { get; set; }
    public dateTime DateCreated{ get; set; }
}
public class Batch
{
    public int TireID { get; set; }
    public int TirePosition{ get; set; }
    public ICollection<Surveys> Survey{ get; set; }
}
public class Removed
{
    public int TireID { get; set; }
    public int TirePosition{ get; set; }
    public dateTime DateRemoved{ get; set; }
    public ICollection<Surveys> Survey{ get; set; }
}

У меня есть запрос, чтобы получить Пакет шин, которые были частью Обзора, и удаленные из Удаленного:

var surveys = ctx.Surveys.Where(a => a.DateSubmitted >= startDate && a.DateSubmitted < endDate).Select(a => new T_Batch
{
    //don't know how to get desired result
}).ToList();

У меня есть пользовательский тип, который должен иметь результат запроса (T_Batch):

public class T_Batch
{
    public int TireID { get; set; }
    public int TirePosition { get; 
    public T_Removed Removed{ get; set; }
}
public class T_Removed
{
    public int TireID { get; set; }
    public int TirePosition { get; set; }
}

Результат запроса возвращает список Surveys, что нормально, но я хотел бы получить список шин для каждого элемента списка Survey и удаленную шину (если она была удалена) для каждой позиции шины. Я не знаю, как этого добиться.

Пример желаемого результата:

    0 Batch_Tire1
    1 Batch_Tire2
        0 Removed_Tire
    2 Batch_Tire3
    3 Batch_Tire4
        0 Removed_Tire
 etc...

UPDATE

Я мог бы сделать что-то подобное, но мне нужно получить набор результатов в качестве моего пользовательского типа.

var surveys = ctx.TM_Survey.Where(a => a.DateSubmitted >= startDate && a.DateSubmitted < endDate).Select(a => new
{
    BatchItem = a.Batch,
    RemovedItem = a.Removed
}).ToList();

ОБНОВЛЕНИЕ 2

Или я мог бы сделать это, но результат возвращает только ограниченное количество строк, равное количеству ключей в TM_Survey

var surveys = ctx.TM_Survey.Where(a => a.DateSubmitted >= startDate && a.DateSubmitted < endDate).Select(a => new T_Batch
{
    TireID = a.T_Batch.Select(b => b.ID).First(),
    TirePosition = a.T_Batch.Select(b => b.TirePosition).First()
    Removed = new T_Removed 
    { 
      //...etc 
    }
}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...