簡體   English   中英

從C#中的集合中刪除空列

[英]remove null column from collection in c#

我有一個表Menu,數據就像所附的屏幕快照Database表一樣

我想要輸出如下圖所示

http://s16.postimg.org/6evrtzkwl/output.png

意味着所有空值或整數== 0都應隱藏。

現在,我僅在第二個屏幕截圖中顯示這5列。

我有這樣的東西。

List<Menu> lstMenus = obj.GetMenus(10);

我的代碼是

var menus = new List< dynamic >();

foreach (Menu menuBE in lstMenus)
    {

        dynamic menu = new
        {

            menuBE.MenuID,
            menuBE.ParentMenuID,
            menuBE.LinkText,
            menuBE.ScreenName,
            menuBE.Parameters,
            menuBE.URL
            // if(menuBE.Parameters.Length>0 ){ Parameters = menuBE.Parameters,}
        };
        menus.Add(menu);
    }

我想在foreach循環中放置一些條件,例如最后一條注釋行。 如果menuBE.Parameters.Length>0則此Parameters列應添加到動態菜單中,否則不添加。 知道如何做到嗎?

據我了解,與James&techloverr相反,您想保留參數為null的記錄:

foreach (Menu menuBE in lstMenus){
    if (menuBE.Parameters.Length > 0){
       dynamic menu = new{
           menuBE.MenuID,
           menuBE.ParentMenuID,
           menuBE.LinkText,
           menuBE.ScreenName,
           menuBE.Parameters,
           menuBE.URL
       };
    }
    else {
       dynamic menu = new{
           menuBE.MenuID,
           menuBE.ParentMenuID,
           menuBE.LinkText,
           menuBE.ScreenName,
           menuBE.URL
       };
    }
    menus.Add(menu);
}


** 更新 **

據我了解,在整個問題中,當源數據具有Parameters.Lenght == 0時, 就不需要屬性Parameters ,這就是為什么要使用動態類型的原因。

不同於 “可以有一個'Parameters = null'屬性”。 如果是這種方法,則無需使用動態類型。 只需將項目添加為聲明的強類型變量的列表項或匿名類型的列表項即可。

使用dynamic類型,您可以在聲明時添加屬性。 因此,您必須將不同的分配區分開為上面的代碼。 如果你想把if外面,以避免重復代碼,您使用ExpandoObject:

var m = new List<System.Dynamic.ExpandoObject>();
foreach (string item in new string[] { "a", "b", "c" }) {
    dynamic menuItem = new System.Dynamic.ExpandoObject();

    menuItem.pos1 = item;
    menuItem.pos2 = (item == "b" ? item : null); // wrong

    if (item == "c") {           // correct
        menuItem.pos3 = "I am at third iteration";
    }

    m.Add(menuItem);
}

看,是否在m.Add(menuItem);處設置了斷點m.Add(menuItem); 這些是結果:
案例項目==“ a”:

menuItem.pos1 = "a";
menuItem.pos2 = null; // wrong: pos2 must not exists

案例項目==“ b”:

menuItem.pos1 = "b";
menuItem.pos2 = "b";

案例項目==“ c”:

menuItem.pos1 = "c";
menuItem.pos2 = null; // wrong: pos2 must not exists
menuItem.pos3 = "I am at third iteration"; // correct: pos3 only exists here.

您可以使用此代碼段

  foreach (Menu menuBE in lstMenus)
    {

        dynamic menu = new
        {

          MenuID = menuBE.MenuID,
          ParentMenuID =  menuBE.ParentMenuID,
          LinkText =  menuBE.LinkText,
          ScreenName = menuBE.ScreenName,

          URL = menuBE.URL,
            Parameters = (menuBE.Parameters.Length>0) ? menuBE.Parameters : null
        };
        menus.Add(menu);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM