Max*_*sky 0 c# linq asp.net asp.net-mvc linq-to-sql
我正在构建一个使用LINQ to SQL的ASP.NET MVC站点.
在我的搜索方法中有一些必需参数和一些可选参数,我想在测试这些可选参数的存在时构建一个LINQ查询.
这就是我目前的想法:
using(var db = new DBDataContext())
{
IQueryable<Listing> query = null;
//Handle required parameter
query = db.Listings.Where(l => l.Lat >= form.bounds.extent1.latitude && l.Lat <= form.bounds.extent2.latitude);
//Handle optional parameter
if (numStars != null)
query = query.Where(l => l.Stars == (int)numStars);
//Other parameters...
//Execute query (does this happen here?)
var result = query.ToList();
//Process query...
Run Code Online (Sandbox Code Playgroud)
这个实现会"绑定" where
子句然后执行捆绑查询吗?如果没有,我该如何实现此功能?
另外,还有什么我可以改进的吗?
提前致谢.
是的,查询只会在ToList()
调用后执行一次.如果您遵循此模式并使用匿名类型,请注意OrderBy()
返回IOrderedQueryable
而不是IQueryable
.
请注意,您可以只是迭代IQueryable
,您不必调用ToList
访问数据.