我有一个表格菜单,数据就像附加的屏幕截图 Database table
我希望输出如下图所示
表示应隐藏所有空值或整数== 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
,那么此参数列应添加到动态菜单中,否则不会。
知道如何做到这一点吗?
答案 0 :(得分:1)
我所理解的,与詹姆斯和詹姆斯相反。 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
,这就是您使用动态类型的原因。< / p>
与不同与“可以有'属性'参数= 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);
处设置断点,则结果如下:
案例项目==“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.
答案 1 :(得分:-1)
您可以使用此代码段
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);
}