itemsList.RemoveAll(a => string.IsNullOrEmpty(a.Group.Tag.ToString()));
var itemsGrpByCycle = itemsList.GroupBy(t=>t.Group.Tag);
能写成一行代码吗
这两句话是不是有问题....第一句话执行之后因为延迟加载所以第二句话执行的是没有remove 的list?
RemoveAll不是linq的...是list的..
才觉得linq是门利器,一直没有很好掌握,那就是说集合中有些是linq的扩展方法,有些是集合自己的方法.那区分这两种方法有什么意义呢?是返回值不一样吗?
@猝不及防: ienum接口下的方法就是linq的.并且他只会返回自己.
可以啊
void test() { 写成一行(); } void 写成一行() { itemsList.RemoveAll(a => string.IsNullOrEmpty(a.Group.Tag.ToString())); var itemsGrpByCycle = itemsList.GroupBy(t=>t.Group.Tag); }
哈哈
用findall不用remove也行的吧
不能,因为RemoveAll返回的是int,无法进行链式调用。
可以的啊,不用remove用findall不就行了
可以,先Group,然后过滤
有道理有道理
bu行,如果我不过滤先分组的话,会报错,tag有的为空
@猝不及防: 如果说你数据里面存在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项