linq - 如何使用 LINQ/EF 中的有序查询从我的存储库中返回 IList

标签 linq entity-framework repository-pattern ef-code-first

我的存储库层一直工作正常,暴露了 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/

相关文章:

entity-framework-4 - EF4 - 存储库和工作单元

c# - 将 IEnumerable 转换为每个值具有多个键的查找

linq - 如何通过 ASPnet Identity 中的 Linq 检索具有特定角色的用户

entity-framework - 为 EF4 中的表|列名称指定不同的名称

c# - Entity Framework 创建的主键不会自动递增

Asp.net mvc3 : How to pull data from database and fill view model in one goal?

unit-testing - 存储库模式和工作单元中的架构问题

c#-4.0 - 用于访问文本文件的存储库模式

c# - 优化 LINQ 表达式

c# - 将最后一个值复制到其他单元格,直到我们看到一个已填充的单元格