我在重構我的EF庫類,以使它們可檢驗的,以下從這個優秀的博客文章建議的過程是:LINQ查詢返回的IQueryable <IEnumerable的<User>>不是IQueryable的<User>
http://blog.iannelson.systems/testing-linq-queries/
所有是很好的,我也能夠鏈接IQueryable擴展方法,如在博客文章中做出更多的良心和更容易閱讀。
我遇到了與關聯List<>
有關的障礙。
該域實體是一個用戶,並且一個用戶有一個List<User>
類型的朋友的集合 - 標準的社交網絡範例。
我想搜索一個用戶朋友的子集,說所有的用戶名以'a'開頭的朋友。所以我這樣做:
public static IQueryable<IEnumerable<User>> SelectFriendsUsernameStartsWith(this IQueryable<User> userQueryable, string searchQuery)
{
return userQueryable.Select(x => x.Friends.Where(y => y.Username.StartsWith(searchQuery)));
}
的問題是,這打破了我的鏈接。返回類型不再是IQueryable<User>
其IQueryable<IEnumerable<User>>
,所以我爲IQueryable<User>
寫的擴展方法不能鏈接到結尾。
這裏的類型差別不作任何意義,我因爲在我的單元測試我的代碼看起來像這樣:
IEnumerable<User> users = new HashSet<User>()
{
new User() {Username = "Aaron"},
new User() {Username = "alex"},
new User() {Username = "Ally"},
new User() {Username = "anthony"},
new User() {Username = "bob"},
new User() {Username = "Bill"}
};
IQueryable<User> userQueryable = users.AsQueryable();
即在一個IEnumerable<User>
調用AsQueryable()
返回IQueryable<User>
沒有(如上面的例子)一個IQueryable<IEnumerable<User>>
任何人都可以在這個?
這兩種類型的真正區別是什麼,以及我如何強制我的示例返回給我IQueryable<User>
而不是IQueryable<IEnumerable<User>>
?
謝謝!
優秀的答案!清除它對我來說!謝謝! – reach4thelasers