c# - Linq 填充 Treeview 控件:实时过滤
问题描述
当用户单击复选框时,我想更新 Treeview。我有一个包含艺术家/专辑/歌曲/和其他一些标准的数据表。树视图包含 2 个级别:艺术家和专辑(每个艺术家 1 个或多个)
所以我有一个原始的 linq 查询,如下所示:
var query = (from i in Globals.ds.Tables[0].AsEnumerable()
select new { art = i.Field<string>("artiste"), alb = i.Field<string>("album"), dis = i.Field<string>("disque") })
.Distinct()
.GroupBy(g=> g.art)
.OrderBy(g => g.Key);
“disque”是根据专辑类型(LP 或 12" 或两者兼有)过滤 Treeview 的附加信息,然后我有 2 个 foreach 循环很好地填充树视图(查询不显示歌曲,这很好每个艺人的专辑数量)
当用户单击框(LP、12" 或两者)时,我想更新查询“实时”,所以我有以下内容(我对 12" 有相同的 linq):
if (!LP.Checked)
{
query = query.Where(p => (string)p.dis != "LP") ;
}
但是“p.dis”不可用,我只有“p.key”,即艺人。
我如何在该步骤使用 .where ?谢谢
解决方案
试试看这个简单的演示。也许它可以指导您如何实现您想要的:
void Main()
{
var data = new List<Data>
{
new Data { Art = "Art1", Alb = "Alb1", Dis = "LP"},
new Data { Art = "Art1", Alb = "Alb2", Dis = "12"},
new Data { Art = "Art2", Alb = "Alb1", Dis = "LP"},
new Data { Art = "Art3", Alb = "Alb1", Dis = "LP"}
};
var query =
(from i in data
select new Data { Art = i.Art, Alb = i.Alb, Dis = i.Dis })
.Where(WhereFunc())
.Distinct()
.GroupBy(g => g.Art)
.OrderBy(g => g.Key);
}
static Func<Data, bool> WhereFunc() => (p) =>
{
if (!LP.Checked)
{
return (string)p.Dis != "LP";
}
else
{
return (string)p.Dis == "LP";
}
};
public class Data
{
public string Art {get; set;}
public string Alb {get; set;}
public string Dis {get; set;}
}
推荐阅读
- ios - 是否可以使用电子邮件中的通用链接(深层链接)启动 iOS 应用程序 - iOS
- database - 如果更新持久性数据库,Ingnite 会自动加载数据
- php - 具有选项来自多对多列的 EntityType 字段时出错
- reactjs - 如何替换我的 redux 操作并使用创建操作库?
- php - 在codeigniter上上传图片和视频
- azure-active-directory - 第三方 Azure AD B2B 能否管理他们自己对我的受保护 API 的权限?
- php - 找不到数据时如何发送空白数组?
- go - 对于回调,将通道作为数据通过其他通道传递
- javascript - 更新动态行Javascript的内容
- android - MediaPlayer 停止音频声音