Плоские данные с SelectMany () как левое соединение - PullRequest
0 голосов
/ 07 мая 2018

Можно ли использовать SelectMany () и он ведет себя как левое соединение?

Я пытаюсь сгладить объект сущности в табличный формат.SelectMany () работает как талисман, пока существует дочерний объект, но я хочу видеть все родительские объекты независимо от того, есть ли у него дочерние объекты.

public class Folder
{
    [Key]
    public int Folder_Id { get; set; }
    public string Folder_Name { get; set; }
    public int Folder_order { get; set; }
    public virtual ICollection<Module> Modules { get; set; }
}
public class Module
{        
    [Key]
    public int Module_Id { get; set; }
    public int? Folder_Id { get; set; }
    public string ModuleName { get; set; }
    public virtual Folder Folder { get; set; }

}
public static List<Menu> GetMenu()
{
    var Menu = db.Folder.Get();
    var q = from u in Menu
    from m in u.Modules
    select new {folderName = u.Folder_Name, moduleName = m.ModuleName};
    return q;
}

Мне нужно:

folderName = "ENG", moduleName = "req"

folderName = "ENG", moduleName = "BOM"

folderName = "Входящие", moduleName = ""

folderName = "Справка", moduleName = ""

folderName = "Панель инструментов", moduleName = ""

folderName = "Заготовка", moduleName = "Отступ"

1 Ответ

0 голосов
/ 07 мая 2018

Когда вы выбирали свойства навигации вместо объединения, вы действительно следовали рекомендованной практике для структуры сущностей. Увы, свойства навигации работают только для внутренних объединений. Так что в этом случае SelectMany вам не поможет. Таким образом, вы должны прибегнуть к объединению:

var q =
    from u in Menu
    join m in Modules on u.Folder_Id equals m.Folder_Id into modules
    from mm in modules.DefaultIfEmpty()
    select new {folderName = u.Folder_Name, moduleName = mm?.ModuleName ?? String.Empty};
    return q;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...