2010-04-27 2 views
1

, как я могу сделать КодексаLINQ нулевой параметр

 static string BuildMenu(List<Menu> menu, int? parentId) 
     { 
      foreach (var item in menu.Where(i => i.ParentMenu == parentId || i.ParentMenu.MenuId == parentId).ToList()) 
      { 
      } 

     } 

return BuildMenu(menuList,null); 

так что если ParentID == NULL, то возвращать только те записи, я => i.ParentMenu == NULL, но когда ParentID> 0, то возвращать записи с я. ParentMenu.MenuId == ParentID

+0

ToList() не требуется, вы можете перебирать над IEnumerable, что если() возвращает. –

ответ

3

Вы можете сделать это в одном операторе, вероятно, что-то вроде этого

var query = from menu in menus 
      where (parentId == null ? menu.ParentMenu == null : menu.ParentMenu != null && menu.ParentMenu.MenuId == parentId) 
      select menu; 

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

var query = menus.AsEnumerable(); 
if (parentId.HasValue) 
    query = query.Where(m => m.ParentMenu != null && m.ParentMenu.MenuId == parentId); 
else 
    query = query.Where(m => m.ParentMenu == null); 

Полный пример:

public class Menu 
{ 
    public Menu ParentMenu { get; set; } 
    public int MenuId { get; set; } 
} 

...

static void Main(string[] args) 
{ 
    List<Menu> menus = new List<Menu>(); 
    for (int i = 0; i < 4; i++) 
    { 
     menus.Add(new Menu() { MenuId = i }); 
    } 

    menus[2].ParentMenu = menus[0]; 
    menus[3].ParentMenu = menus[1]; 

    Console.WriteLine(BuildMenu(menus, 1)); 
    Console.Read(); 
} 

static string BuildMenu(List<Menu> menus, int? parentId) 
{ 
    var query = menus.AsEnumerable(); 
    if (parentId.HasValue) 
     query = query.Where(m => m.ParentMenu != null && m.ParentMenu.MenuId == parentId); 
    else 
     query = query.Where(m => m.ParentMenu == null); 

    StringBuilder builder = new StringBuilder(); 
    foreach (Menu menu in query) 
    { 
     // build your string 
     builder.Append(menu.MenuId + ";"); 
    } 

    return builder.ToString(); 
} 
Смежные вопросы