我的存储库层一直工作正常,暴露了 IList<T>
用于诸如 GetAll()
之类的列表等等 但是,我尝试使用 OrderBy
在我的 LINQ 查询之一上。然后我遇到了真正的大问题,因为 LINQ 查询无法转换为 IList
.它想返回一个 IOrderedEnumerable
.
这是一个大问题,因为我想保持我的 repo 自包含和 不是 暴露 IQueryable
到我的服务。为什么我要因为“orderby”而改变我的 repo 架构!
因此,尽管如此,我还是开始将我的存储库层转换为返回 IEnumerable
这样我至少可以返回排序的数据。然后我遇到了更多问题,因为我需要将数据类转换为 IEnumerable
所以我可以轻松地在我的 View 模型和数据模型类之间进行映射。 (这是使用 AutoMapper)。
然后我意识到代码优先不喜欢 IEnumerable
如果未使用至少 IList
定义,则不会在表之间建立关系(我还告诉 ICollection
??)。
所以我的问题是我从这里做什么?我想要做的就是以有序的方式将数据返回给客户端(在本例中是服务),而无需在我的应用程序中一直更改返回类型。
最佳答案
例如,这有效,它排序并返回 IList<T>
:
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
public string City { get; set; }
}
public IList<Customer> GetSortedListOfCustomersInCity(string city)
{
return context.Customers
.Where(c => c.City == city)
.OrderBy(c => c.Name)
.ToList();
}
(我认为这也是 Reed Copsey 在他的回答中的意思。)我想,你的问题是另一种类型,因为这个例子太明显了。但是我无法从您的问题中得出您的问题到底在哪里。感谢您的一段不工作的代码。
关于linq - 如何使用 LINQ/EF 中的有序查询从我的存储库中返回 IList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490265/