我有一个自定义对象,定义如下:
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()
但我无法理解或找到有关如何使用这些功能的更清晰的信息。
谢谢。
答案 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操作来获得结果。您可以在这里阅读更多关于如何使用它的信息
以下代码将返回Campo2&gt;所有对象。 2
List<Testobj> NewList = listobj.Where((x => x.Campo2>2).ToList();