根据元素值从List中选择子列表

时间:2018-02-16 12:25:07

标签: c# list

我有一个自定义对象,定义如下:

public class Testobj
{
    public double Campo1 { get; set; }
    public int Campo2 { get; set; }
    public string Stringa1 { get; set; }
    public Testobj() { }
}

然后,我使用以下元素构建List<Testobj>

        List<Testobj> listobj = new List<Testobj>();
        Testobj to1 = new Testobj() { Campo1 = 0.0, Campo2 = 1, Stringa1 = "cudumar0" };
        Testobj to2 = new Testobj() { Campo1 = 1.0, Campo2 = 1, Stringa1 = "cudumar1" };
        Testobj to3 = new Testobj() { Campo1 = 2.0, Campo2 = 1, Stringa1 = "cudumar2" };
        Testobj to4 = new Testobj() { Campo1 = 3.0, Campo2 = 3, Stringa1 = "cudumar3" };
        Testobj to5 = new Testobj() { Campo1 = 4.0, Campo2 = 3, Stringa1 = "cudumar4" };
        Testobj to6 = new Testobj() { Campo1 = 5.0, Campo2 = 3, Stringa1 = "cudumar5" };
        Testobj to7 = new Testobj() { Campo1 = 6.0, Campo2 = 2, Stringa1 = "cudumar6" };
        listobj.Add(to1);
        listobj.Add(to2);
        listobj.Add(to3);
        listobj.Add(to4);
        listobj.Add(to5);
        listobj.Add(to6);
        listobj.Add(to7);

我现在需要根据其元素选择listobj子列表&#39;值。 除了我需要得到这样的东西:

List<Testobj> NewList = listobj.Select(...? );

我试过

var query1 = listobj.Select(pr =&gt; pr.Campo2);

以及.Where().SelectMany() 但我无法理解或找到有关如何使用这些功能的更清晰的信息。 谢谢。

3 个答案:

答案 0 :(得分:2)

Where是您正在寻找的功能。它为您提供了每个对象,并根据您是否希望它包含在子列表中而返回true或false - list.Where(x => x.Campo2 > 100)如果您只想要值Campo2高于100的元素。

Select用于转换对象 - 如果您只想返回子列表中的字段而不是整个元素,则需要list.Select(x => x.Campo2)来构建IEnumerable<int> list的元素。

您可以将两者组合起来进行过滤和转换。例如,list.Where(x => x.Campo2 > 100).Select(x => x.Campo1)用于构建IEnumerable<double>Campo1的那些元素中的所有Campo2 > 100字段构成。

如果您需要将结果转换为List<>,则可以在过滤器和转换方法链的末尾调用.ToList()

答案 1 :(得分:1)

1:你问题的答案:

您正在寻找的行是(Pseudo):

List<Testobj> filteredList = listobj.Where(x => x.Campo1.SomeProperty == 1.1m && x.Campo2 > 2 || x.Stringa1.Equals("cudumar0") ).ToList();

您可以根据逻辑运算符&amp ;;删除,修改和添加各种条件。和|。

2:如有任何问题,请始终提供:输入,预期输出和您已经尝试过的描述的示例。 SO不是代码编写服务。您可以就特定问题寻求帮助,在合法地宣称您遇到问题之前,您需要能够展示您自己解决问题的努力。

不费力?没问题。

答案 2 :(得分:0)

您可以使用LINQ操作来获得结果。您可以在这里阅读更多关于如何使用它的信息

Proper Linq where clauses

以下代码将返回Campo2&gt;所有对象。 2

List<Testobj> NewList = listobj.Where((x => x.Campo2>2).ToList();