我寫了一個自定義比較器來對字符串和數字進行排序。這一切工作正常。LINQ查詢中的自定義比較器對字符串/數字進行排序
但是,我重寫我的整個BLL在可能的情況下使用LINQ,因爲我喜歡它的語法。現在我絆倒在使用我的自定義比較器。由於LINQ語法(基於查詢)不允許使用自定義比較器,現在我正在使用基於LINQ的方法。
但爲了使它工作,我需要做一箇中間ToList(),它再次正常工作,但看起來有點奇怪嗎?
var areas = cc.Areas.Where(a => a.ProjectId == ProjectId).ToList()
.OrderBy(a => a.UnitNumber, new Common.Comparers.StringNumericComparer());
現在我不能確定這是否與SQL查詢做第一個被執行,然後在我的C#代碼方面排序的結果,但是這超出了我的知識。 ToList()是否強制要在數據庫上執行linq查詢的第一部分?
謝謝!是否有任何性能問題相關?我沒有看到任何其他的選擇來實現這一點。我可以重寫這個查詢基於語法嗎? – Martin
@Martin:肯定有性能問題。它將整個列表帶到ToList上的內存中,並在IQueryable中作爲查詢在數據庫中執行,並僅帶回過濾結果。爲什麼你需要創建這樣的比較器? –
但是沒有其他辦法可以實現這個目標?另一方面,真正基於第一個過濾器的行數不會超過10行。 – Martin