首页 新闻 会员 周边 捐助

linq 这两句话能和这写在一起吗

0
悬赏园豆:5 [已解决问题] 解决于 2018-03-27 11:07


itemsList.RemoveAll(a => string.IsNullOrEmpty(a.Group.Tag.ToString()));
var itemsGrpByCycle = itemsList.GroupBy(t=>t.Group.Tag);

问题补充:

能写成一行代码吗

 

这两句话是不是有问题....第一句话执行之后因为延迟加载所以第二句话执行的是没有remove 的list?

猝不及防的主页 猝不及防 | 老鸟四级 | 园豆:2878
提问于:2018-03-22 16:37
< >
分享
最佳答案
0

RemoveAll不是linq的...是list的..

收获园豆:2
吴瑞祥 | 高人七级 |园豆:29449 | 2018-03-22 20:12

才觉得linq是门利器,一直没有很好掌握,那就是说集合中有些是linq的扩展方法,有些是集合自己的方法.那区分这两种方法有什么意义呢?是返回值不一样吗?

 

猝不及防 | 园豆:2878 (老鸟四级) | 2018-03-23 08:38

@猝不及防: ienum接口下的方法就是linq的.并且他只会返回自己.

吴瑞祥 | 园豆:29449 (高人七级) | 2018-03-23 11:15
其他回答(3)
0

可以啊

void test()
{
写成一行();
}

void 写成一行()
{

itemsList.RemoveAll(a => string.IsNullOrEmpty(a.Group.Tag.ToString()));
var itemsGrpByCycle = itemsList.GroupBy(t=>t.Group.Tag);

}
收获园豆:1
爱编程的大叔 | 园豆:30844 (高人七级) | 2018-03-22 16:51

哈哈

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2018-03-22 17:54

用findall不用remove也行的吧

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2018-03-22 18:32
0

不能,因为RemoveAll返回的是int,无法进行链式调用。

收获园豆:1
空明流光 | 园豆:111 (初学一级) | 2018-03-22 17:56

可以的啊,不用remove用findall不就行了

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2018-03-22 18:31
0

可以,先Group,然后过滤

收获园豆:1
花飘水流兮 | 园豆:13617 (专家六级) | 2018-03-22 22:08

有道理有道理

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2018-03-23 08:31

bu行,如果我不过滤先分组的话,会报错,tag有的为空

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2018-03-23 14:53

@猝不及防: 如果说你数据里面存在null,你的代码貌似就不对 —— string.IsNullOrEmpty(a.Group.Tag.ToString()),null是不可能ToString的;

 

此先过滤后过滤都无所谓,好好验证问题所在,linq官方出品没那么弱鸡。


var bb = new List<(string k, string v)> { ("", "0"),("a","1"),(null,"2") };
var cc= bb.GroupBy(t => t.k).Where(t => !string.IsNullOrEmpty(t.Key)).ToList();1项
var dd = bb.GroupBy(t => t.k).ToList();3项

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2018-03-23 15:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册