У меня была какая-то похожая проблема, я попробовал это и получилось лучше:
child.count (x => x.paretnID == inputParentID) child.where (x => x.parentID == inputParentID)
мой оригинальный код, который занимал около 15-20 секунд на каждой итерации, был: return (isEdit)? db.ChasisBuys.Single (x => x.ChasisBuyID == long.Parse (Request.QueryString ["chbid"])). Chasises.Count (y => y.Bikes.Count> 0 && y.ColorID == buyItems [(int) index] .ColorID && y.ChasisTypeID == buyItems [(int) index] .ChasisTypeID) .ToString (): "-";
новый код, который работает хорошо:
**return (isEdit) ? db.Chasises.Where(x => x.ChasisBuyID == long.Parse(Request.QueryString["chbid"])).Count(y => y.Bikes.Count > 0 && y.ColorID == buyItems[(int)index].ColorID && y.ChasisTypeID == buyItems[(int)index].ChasisTypeID).ToString() : "-";**
База данных насчитывает около 1000 записей в шасси, около 5 в chasisBuys и около 20 в байках. Мое мнение таково, что запросы Linq to SQL не выполняют предварительных оценок, таких как логические выражения, которые, например, если вы напишите «return a && b && c;» если утверждение a является ложным, другие операторы не оцениваются, и я ожидал такого в linq to sql, но это не так.