Linq可以从datagrid中检索行

时间:2012-09-27 05:29:29

标签: c# wpf linq

我正在使用WPF数据网格。我可以使用Linq从数据网格中检索行。

类似的东西:

List<People> people = from products in datagrid1 select products.ToList<People>();

我觉得不对?如果Linq支持datagrid会很棒。

谢谢。

3 个答案:

答案 0 :(得分:4)

您应该能够查询datagrid的ItemSource属性。

答案 1 :(得分:2)

我怀疑你遇到的问题是ItemsSource被弱类型化为IEnumerable - 而大多数LINQ to Objects都在IEnumerable<T>上运行。您可以使用Cast<T>()方法创建一个序列,在必要时将每个项目强制转换。试试这个:

List<People> people = datagrid1.ItemsSource.Cast<People>().ToList();

请注意,每当您看到from x in source select x形式的表达式时,您应该考虑使用source - 不应盲目使用查询表达式;弄清楚每个人的意思,然后确定它是否是表达你需要的最合适的方式。

如果实际想要更大的查询,您可能根本不想通过List<People>。例如:

// Note the explicit typing of the range variable, which corresponds to a Cast
// call in the query translation.
var query = from People person in datagrid1.ItemsSource
            where person.Age > 50
            select person.Name;

(顺便提一下,请考虑将People类型更改为Person,除非它确实代表了一组人 - 在这种情况下,您应该给它一个反映该集合真正含义的名称。)

答案 2 :(得分:1)

试试这个:

List<People> people = (from product in datagrid1.ItemsSource
                       select product).ToList<People>();