大家下午好,隨機化實體框架查詢結果
我有一個listview填充使用linqdatasource +實體框架iqueryable查詢。
該查詢使用的紡絲(在T-SQL頂部)是這樣的:
context.Categories().OrderBy(c=>c.Name).Take(20);
所以它帶給我的20條記錄,我想按名稱排序。
現在我想以隨機順序顯示這20條記錄。最好的方法是什麼來實現這一點?
大家下午好,隨機化實體框架查詢結果
我有一個listview填充使用linqdatasource +實體框架iqueryable查詢。
該查詢使用的紡絲(在T-SQL頂部)是這樣的:
context.Categories().OrderBy(c=>c.Name).Take(20);
所以它帶給我的20條記錄,我想按名稱排序。
現在我想以隨機順序顯示這20條記錄。最好的方法是什麼來實現這一點?
這竟然使用擴展方法,排序首先按名稱很簡單,然後調用採取(對T-SQL頂部)和後隨機
context.Categories().OrderByName().Take(20).OrderByRandom();
public static IQueryable<Category> OrderByName(this IQueryable<Category> query)
{
return from c in query
orderby c.Name
select c;
}
public static IQueryable<T> OrderByRandom<T>(this IQueryable<T> query)
{
return (from q in query
orderby Guid.NewGuid()
select q);
}
我相信這個職位的答案是你需要的東西:
Linq to Entities, random order
編輯:
首先獲得您的前20條記錄。然後用你已經取前20名的項目,隨機他們都在C#中,不涉及數據庫的所有:
var yourRecords = context.Categories().OrderBy(c=>c.Name).Take(20); // I believe .Take() triggers the actual database call
yourRecords = yourRecords.OrderBy(a => Guid.NewGuid()); // then randomize the items now that they are in C# memory
這可以在不使用擴展方法的情況下使用純lambda表達式,但我沒有測試它 – Milox
很酷,很高興你能工作。是否需要嘗試/捕獲?如果他們所做的只是拋出異常,是不是沒有它們的默認行爲? –