linq to datatable多条件动态查询

时间:2021-06-11 09:06:00
Email                   ChineseName         CategoryID
a@a.com               产品名称A                  1,2,3
b@a.com               产品名称b                  5,6,7


三个动态条件
1.重复Email 大于/等于/小于N次      如果N为空就过滤这个条件
2.模糊查询chineseName     如果chineseName 为空就过滤这个条件
3.CategoryID只能输入一个ID,是否包含在CategoryID中      如果CategoryID为空就过滤这个条件
请问下是一起写 还是where过滤三次写啊 

6 个解决方案

#1


我一般都是使用Where条件。

#2


不过也有查询动态目录表达式,感觉有点麻烦。

#3


引用 1 楼 duanzi_peng 的回复:
我一般都是使用Where条件。


能帮忙写个大概么?linq不怎么熟悉
查个datatable 重复数据  谷歌出来 全是不重复数据

#4


查重复数据,你需要先sum+groupby,然后嵌套查询这个sum>1的

#5


引用 4 楼 Z65443344 的回复:
查重复数据,你需要先sum+groupby,然后嵌套查询这个sum>1的



 var query = from t in dt_Order.AsEnumerable()
                            group t by new
                            {
                                email = t.Field<string>("Email")
                            } into g
                            select new
                            {
                                Email = g.Key.email,
                                rowcount=g.Count()
                            };
                foreach (var item in query)
                {
                    if (item.rowcount > 1)
                    {
                        item.Email
                    }
                }


如何嵌套查询呢

#6


var query = from t in dt_Order.AsEnumerable()
                            group t by new
                            {
                                email = t.Field<string>("Email")
                            } into g
                            where g.Count()>1 //////
                            select new
                            {
                                Email = g.Key.email,
                                rowcount=g.Count()
                            };

#1


我一般都是使用Where条件。

#2


不过也有查询动态目录表达式,感觉有点麻烦。

#3


引用 1 楼 duanzi_peng 的回复:
我一般都是使用Where条件。


能帮忙写个大概么?linq不怎么熟悉
查个datatable 重复数据  谷歌出来 全是不重复数据

#4


查重复数据,你需要先sum+groupby,然后嵌套查询这个sum>1的

#5


引用 4 楼 Z65443344 的回复:
查重复数据,你需要先sum+groupby,然后嵌套查询这个sum>1的



 var query = from t in dt_Order.AsEnumerable()
                            group t by new
                            {
                                email = t.Field<string>("Email")
                            } into g
                            select new
                            {
                                Email = g.Key.email,
                                rowcount=g.Count()
                            };
                foreach (var item in query)
                {
                    if (item.rowcount > 1)
                    {
                        item.Email
                    }
                }


如何嵌套查询呢

#6


var query = from t in dt_Order.AsEnumerable()
                            group t by new
                            {
                                email = t.Field<string>("Email")
                            } into g
                            where g.Count()>1 //////
                            select new
                            {
                                Email = g.Key.email,
                                rowcount=g.Count()
                            };