c# - 返回一个 IQueryable<dynamic> 以在父方法中进行过滤

标签 c# linq

例如,我有这样的代码:

      IQueryable<MyModel> q = new List<MyModel>().AsQueryable(); // this is just an example, this is obviously not a list

      var query = from item in q select new { item.Property };

      var oneItem = query.FirstOrDefault(x => x.SomeProperty == somevalue);
      var allItems = query.ToArray();

现在在更复杂的情况下,我需要得到 oneItemallItems以两种不同的方法。因此,为了遵循 DRY,我想将查询移至私有(private)方法,然后在使用方法中只需调用 this.GetQuery().FirstOrDefault().ToArray()根据需要。

但是,当我尝试将方法设置为 IQueryable<dynamic> 时我收到“表达式树可能不包含动态操作”错误。如果我将其更改为 IQueryable<object>然后我在 oneItem 中进行过滤不起作用。

最佳答案

你需要返回

IQueryable<MyObject>

您可以使用泛型来使您的方法/类变得干燥,例如

IQuerable<T> GetQueryable()

然后,消费者可以指定 T 应该是什么,然后您就可以离开。

您不能将动态与 linq 一起使用。请参阅here了解原因。

关于c# - 返回一个 IQueryable<dynamic> 以在父方法中进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915026/

相关文章:

c# - 设置键/值对

c# - 使用 sp_executesql 运行时相同的 SQL 查询很快,如果在查询分析器中作为动态查询执行则非常慢,为什么?

c# - 每个 parent 只选择 1 个 child

c# - 基于两个属性从列表中选择不同值的最快方法

c# - 在数据表列中查找最长的字符串

c# - 延迟的 LINQ 查询执行实际上是如何工作的?

c# - 属性、索引器或动态成员访问不能作为 out 或 ref 参数传递

c# - 对集合进行排序并根据特定条件对结果进行排名

c# - 在应用设置中同步应用版本和内部版本号

c# - 有没有办法改变 Parallel.Foreach 交织其操作的数组的方式?