【问题标题】:Linq on a Datasource of list type列表类型数据源上的 Linq
【发布时间】:2011-08-05 20:03:40
【问题描述】:

我有几个实体对象,例如。来自 IComparable 的客户、订单 并且全部映射到数据库字段。

我在运行时将网格绑定为List<Customer>List<Orders> 等。

我正在编写一个自定义列类 我可以在哪里得到Parent.DataSource(它总是List<>),但实际类型未知。我需要将其转换为列表类型(可能是 IList),以便我可以针对数据源编写 linq 查询。

类似

IList t = Parent.DataSource as IList
var qry = from cl in t

【问题讨论】:

  • 你建议的答案有什么问题?
  • 我无法在 IList 上进行 linq 选择

标签: linq list generics dynamic


【解决方案1】:

您应该能够通过 LINQ 的 Cast() 方法将您的 Parent.DataSource 转换为适当的类型,并对其进行查询:

var query = from customer in Parent.DataSource.Cast<Customer>()
            where customer.Foo == "Bar"
            select customer;

【讨论】:

  • 我不知道源是什么类型...我可以做一些更通用的吗?数据源可能是我拥有的 100 个对象实体之一。
  • 如果你不知道它可能是什么类型,你怎么能指望它被转换?
  • @Graci:在不知道类型的情况下很难查询某些内容。您可以使用 OfType() 来检索客户,并检查它是否为空 - 但这会很难看。我会考虑看看是否有办法制作一个适用于您的场景的自定义界面,并让您的所有实体都实现它......
  • 我可以通过创建一个将泛型列表作为参数的方法并将 linq 注销吗?
  • @Graci:是的,或者你可以把它变成一个通用方法——即:public IList&lt;T&gt; Create&lt;T&gt;(...),然后把它称为Create&lt;Customer&gt;()
【解决方案2】:

你可以在 Linq 中使用Cast

var query = from customers in Parent.DataSource.Cast<Customer>()
            select customers;

Cast&lt;Customer&gt; 会将您的 Parent.DataSource 转换为您相应的客户实体

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2021-01-02
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多