2011-03-30 21 views
2

我的仓库层一直工作正常,为的东西像GetAll()等名单曝光IList<T>返回的IList不过,我想对我的LINQ查询的一个使用OrderBy。然后我遇到了真正的大问题,因为LINQ查询无法转换为IList。它想要返回一个IOrderedEnumerable如何从我的仓库与LINQ/EF有序查询

这是一个大问题,因为我想保持自己的回购自我和暴露IQueryable到我的服务。为什么只是因为'orderby'而改变我的回购架构!

所以,尽管这个我开始我的仓库层转换为返回IEnumerable,这样我至少可以返回排序的数据。然后我遇到了更多的问题,因为我需要将我的数据类转换为IEnumerable,这样我可以轻松地在我的视图模型和数据模型类之间进行映射。 (这是使用AutoMapper)。

然后我意识到代码优先不喜欢IEnumerable,如果不使用至少一个IList定义(而且我还告诉ICollection?)不会建表之间的关系。

所以我的问题就是从这里做什么吗?我所要做的就是以有序的方式将数据返回给客户端(在本例中为服务),而不必在整个应用程序中改变返回类型。

+2

这将帮助,如果你表现出你正在尝试做的,哪些部分不工作真正的代码示例。 – 2011-03-30 18:05:42

+2

你也应该张贴链接到你前面的问题,你有这并不能满足你的解决方案:http://stackoverflow.com/questions/5487115/how-do-i-order-an-underlying-child-collection-的父母在类中linq-lambda – 2011-03-30 18:12:56

+0

顺便说一句。建议使用“ICollection”,因为动态代理正在使用“HashSet”。 – 2011-03-30 18:14:33

回答

2

例如,这工作,并进行排序,并返回一个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(); 
} 

(我想这也是什么里德·科普塞在他的回答的意思。)我想,你的问题是另一种类型的,因为它这个例子的作用太明显了。但我无法从你的问题中得出你的问题究竟在哪里。一块你不工作的代码表示赞赏。

+0

我试着把所有东西都放回到IList中,以便代码先注册关系。我得到‘CodeFirstNamespace。’不能在LINQ到实体查询构造错误“实体或复杂的类型。我想这是因为我试图投射到一个具体的数据模型类。我是否仍然可以将我的实体与其子列表分类排序? – jaffa 2011-03-31 08:24:10

+0

@Jon:我不知道。如果你要显示那些不起作用的代码,那么对于我们所有人来说,一切都会更容易理解。 – Slauma 2011-03-31 12:43:56

1

所以我的问题就是从这里做什么吗?我所要做的就是以有序的方式将数据返回给客户端(在本例中为服务),而不必在整个应用程序中改变返回类型。

当您创建查询,您可以随时返回results.ToList(),这将对其进行评估,并将其转换为IList<T>你。

在很多情况下,如果您的查询在任何情况下都是内部的IQueryable<T>,那么它将很有利,因为它将充分评估查询并防止在关闭内部数据上下文时可能出现的问题,然后尝试枚举结果。

+0

谢谢我会尝试,但我相信这不适合我。 – jaffa 2011-03-30 19:37:32