如何从对象列表中获取属性,该对象是具有最低数值的字符串

时间:2012-08-20 08:02:48

标签: c# linq list

说我有一个人名单:

Var people = new List<Person>();

其中

Public class Person {
Public string ReferenceString { get; set; }
}

引用字符串是一串数字,所以我可能在我的列表中;

Var person1 = new Person { ReferenceString = "12" };
Var person2  = new Person { ReferenceString = "11" };
Var person3 = new Person { ReferenceString = "14" };

我想要做的是以某种方式取回具有最低数值的引用字符串,在本例中为“11”。 所以我猜它需要在线上的某个地方转换为int,并且正在按照以下方式工作:

people.Where(x => Int32.Parse(x.ReferenceString));

不知道如何进行比较。

4 个答案:

答案 0 :(得分:3)

您需要将其转换为int,按该值排序并取第一个(最低):

Person lowPerson = people.OrderBy(p => int.Parse(p.ReferenceString)).First();

如果您只想要最低值:

int lowest = people.Min(p => int.Parse(p.ReferenceString));

但你应该考虑首先将它存储为int。

答案 1 :(得分:0)

您的代码会出错,因为ReferenceString是字符串,您要为其分配整数值。

由于您说您无法更改数据类型,您可以

Var person1 = new Person { ReferenceString = "12" };
Var person2  = new Person { ReferenceString = '11" };
Var person3 = new Person { ReferenceString = "14" };

在这种情况下使用

var min = people.Min(x => Convert.ToInt32(x.ReferenceString));

如果你想找出哪些pesons有最小的ReferenceString,你可以这样做。

var result = people.Where(x => x.ReferenceString == min.ToString());

答案 2 :(得分:0)

如果存储数字,我会将ReferenceString设为ReferenceInteger。然后,您可以使用Min方法并获取记录。像这样:

var person1 = new Person { ReferenceString = 12 };
            var person2 = new Person { ReferenceString = 11 };
            var person3 = new Person { ReferenceString = 14 };

            var people = new List<Person>();
            people.Add(person1);
            people.Add(person3);
            people.Add(person2);

            var returnValues = people.Where(x => x.ReferenceString == people.Min(y => y.ReferenceString));

这里ReferenceString的类型是整数。考虑相应地重命名该属性。

答案 3 :(得分:0)

您可以使用MoreLinq's MinBy method查找价值最低的人,而无需对所有人进行排序,如果您的人数不多,这将效率低下。

Person lowPerson = people.MinBy(p => int.Parse(p.ReferenceString));