如何通过LINQ在某些条件下隐藏部分数据表?
如果我有这样的数据表
id name flag value dep hours
1 aa 0 20 3 22
2 bb 1 35 47 5
3 cc 2 77 23 7
4 aaa 0 13 98 19
5 bbb 1 67 3201 2
6 ccc 2 66 452 4
现在我希望flag = 2
隐藏部分数据表,如下所示:
id name flag value dep hours
1 aa 0 20 3 22
2 bb 1 35 47 5
3 cc 2 7
4 aaa 0 13 98 19
5 bbb 1 67 3201 2
6 ccc 2 4
答案 0 :(得分:3)
如评论所述,DataTable
包含数据,您无法隐藏"它,你可以从表中删除它。当然,无论你在哪里显示它都可以隐藏(f.e in DataGridView
)。
你:
嗯,好吧如何删除部分不是整行,我的意思是细胞?
foreach(DataRow row in table.Rows)
{
int flag = row.Field<int>("flag");
if(flag == 2)
{
row.SetField("value", new Nullable<int>());
row.SetField("dep", new Nullable<int>());
}
}
答案 1 :(得分:1)
您可以在LINQ查询中检索数据时使用三元运算符::
var data=(from table_name in DataContextName.Table_Name
select new
{
id=table_name.id,
name=table_name.name,
flag=table_name.flag,
value=(table_name.flag==2? "" : table_name.value),
dep=(table_name.flag==2? "" : table_name.dep),
hours=table_name.hours
}).ToList();
答案 2 :(得分:0)
您也可以直接在linq上实现它。请参阅下面的示例。
DataTable dt = new DataTable();
dt.Columns.Add("flag");
dt.Columns.Add("value");
dt.Columns.Add("dep");
dt.Rows.Add("0", "20", "3");
dt.Rows.Add("1", "35", "47");
dt.Rows.Add("2", "77", "23");
var myResults = from o in dt.AsEnumerable()
select new
{
flag = o.Field<string>("flag"),
value = (o.Field<string>("flag") == "1") ? string.Empty : o.Field<string>("value"),
dep = (o.Field<string>("flag") == "1") ? string.Empty : o.Field<string>("dep")
};