例如,我有这样的代码:
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();
现在在更复杂的情况下,我需要得到 oneItem
和allItems
以两种不同的方法。因此,为了遵循 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/