You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF项目Telerik QueryableEntityCoreCollectionView调用Linq Where始终失败

解决方案

问题根因

Telerik的QueryableEntityCoreCollectionView是为服务端数据操作(分页、过滤、排序)设计的封装组件,它的AsEnumerable()方法并未将实体实际加载到本地内存,返回的仍是Telerik封装的查询代理迭代器。后续调用Linq的Where、ToList等方法时会触发代理的内部查询逻辑,该逻辑存在空引用缺陷,进而抛出异常。你第二次补充中获取到的QueryableProxy就是这个查询代理的实例。

可用解决方法

  • 直接遍历SourceCollection提取原始实体,再执行Linq操作:
public IEnumerable<Client> FilteredClients {
    get {
        List<Client> allClients = new List<Client>();
        // 遍历SourceCollection获取所有Client实体
        foreach (var item in clients.SourceCollection)
        {
            if (item is Client client)
            {
                allClients.Add(client);
            }
        }
        // 内存实体可正常使用所有Linq操作
        return allClients.Where(t => /* 替换为你的真实过滤条件 */);
    }
}
  • 如果确认SourceCollection内所有元素都是Client类型,可用OfType简化代码:
public IEnumerable<Client> FilteredClients {
    get {
        return clients.SourceCollection
            .OfType<Client>()
            .Where(t => /* 替换为你的真实过滤条件 */)
            .ToList();
    }
}
  • 额外注意事项:调用过滤逻辑前请确认QueryableEntityCoreCollectionView的IsLoading属性为false,确保数据已完成加载,避免未加载完成时操作导致空引用。

内容的提问来源于stack exchange,提问作者Mathieu L'Ecuyer-Turcotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:06:10