加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用lambda / linq从集合中提取一些数据到对象?

发布时间:2020-12-16 01:29:39 所属栏目:百科 来源:网络整理
导读:我有一个IList Animals farmAnimals; 这个清单有三种类型, 奶牛 羊 鸡 我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊. 我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空
我有一个IList< Animals> farmAnimals;

这个清单有三种类型,

>奶牛
>羊
>鸡

我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊.

我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空?还是有一种比较棘手的方法?

结果需要

IList<Aniamls> chickens;
IList<Animals> farmAnimals; // only contains the cows and sheep,now.

干杯!

澄清问题:

什么是更高效的? FindAll&删除所有与Where的建议?

解决方法

假设:

public abstract class Animal {}

public class Chicken : Animal {}

你可以做:

var chickens = animals.OfType<Chicken>().Cast<Animal>().ToList();

var nonChickens = animals.Except(chickens).ToList();

编辑

任何合理的答案都应该是O(n),这意味着原始列表中的每个项目只处理一次.因此,我建议采取一种必要的方法:

var chickens = new List<Animal>();
var nonChickens = new List<Animal>();

foreach(var animal in animals)
{
    var list = animal is Chicken ? chickens : nonChickens;

    list.Add(animal);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读