如果它只是你擔心,我猜你不想在表上的所有內容進行Contains()
的速度,你只是想找到所有比賽第2條規則,然後檢查他們所有人,是否包含正確的價值的結果,在這種情況下,你可以這樣做:
加入
.ToList()
這個強制查詢返回結果
var result = db.Supplier.Where(r=>r.Category.Name=="Food" &&
r.SupplierType.Code=="ShortValue").ToList();
result = result.Where(r=>Model.Pattern.Contains(r.Value));
,然後查詢第一個結果組。
,或者你可以讓.Net框架弄清楚執行查詢,並完成類似的最佳途徑:
IQueryable<Suppliers> results = db.Supplier.Where(x => x.Category.Name == "Food");
results = results.Where(x => x.SupplierType.Code == "ShortValue");
results = results.Where(x => Model.Pattern.Contains(x.Value);
看到,當您使用Iqueryable<>
則淨將推遲執行,並supposd到優先處理訂單以及如何執行搜索
真正的區別在於您想在數據庫中完成哪部分任務,以及您想在內存中完成哪部分任務?你可以用不同的方式使用Ienumerable和IQueryable來返回不同的結果,你可以在db中完成所有的fintering,只返回你想要的確切結果,或者你可以讓一部分查詢在done中完成並返回很多回到內存,然後過濾器的第二部分執行。選擇哪一個確實取決於你的應用程序,但是大多數情況下,將更少的內存帶入內存並讓db去完成這項工作是你最好的選擇。
我真的不明白這個問題,如果.Container()在同一個查詢中或在第一個查詢之後,它會如何影響結果? – 2014-10-03 02:04:53
道歉。我需要應用第一個查詢,這會刪除大量r.Values長的垃圾記錄。第一個查詢應該返回大約5條記錄。然後,我可以將「包含」應用於這5條記錄,其中最大長度爲50個字符。 – SamJolly 2014-10-03 02:26:16