使用LINQ从列表中返回对象的查询

4
我有一个名为foo的列表,其中包含类型A类的数据(包含成员FName,LName和Total)。我需要获取姓氏为“foobar”的数据列表。
我知道这听起来是一个简单的问题,但这让我很生气!因为我会在运行时得到返回列表中的成员。
谢谢您提前的帮助!
编辑: 对不起,Geeks,List是动态的,类型为对象。我只知道在运行时它是Class A类型。

4
展示你的完整代码。 - Soner Gönül
1个回答

16

可以使用LINQ轻松完成:

using System.Linq;

(...)

List<A> foo = GetFooList();    // gets data
List<A> fooBorItems = foo.Where(a = > a.FName == "foobar").ToList();

或者使用基于语法的查询:

List<A> fooBorItems = (from a in foo
                       where a.FName == "foobar"
                       select a).ToList();

对于 List<object>,先使用 Cast<T> 扩展方法。它将把所有源集合元素转换为 A(如果不可能,则会抛出异常):
List<A> fooBorItems = foo.Cast<A>().Where(a = > a.FName == "foobar").ToList();

或者 OfType<A>(它将仅返回可以强制转换的元素,对于那些无法强制转换的元素不会引发异常):

List<A> fooBorItems = foo.OfType<A>().Where(a = > a.FName == "foobar").ToList();

抱歉,我忘了提到这个列表是动态的,且列表是对象类型。只有在运行时我才知道它是A类的类型。 - Arun Selva Kumar
感谢您的回复Marcin,a.FName不能使用 - 因为列表是对象类型,而我将FName作为字符串。 - Arun Selva Kumar
它可以在Cast<A>()OfType<A>之后使用,因为它们都返回IEnumerable<A> - MarcinJuraszek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接