我有一个Azure云服务,它当前连接到一个SQL存储过程,该过程执行一个没有参数的select *。服务返回json。表中大约有10k行。该代码有一个列表包含要在一个列上进行筛选。
List<clsSitesData> lstFilteredData = lstSearchData.Where(s => s.LS_TITLE.ToLower().Contains(SearchData.ToLower())).ToList();
令人惊讶的是,从jquery/knockout客户端消费服务非常快。
从代码中,似乎我每次都将整个表加载到列表中。
首先,我认为我将受益于存储过程中的参数来限制返回的数据,对吗?另外,也许还有一些SQL索引——记住SQL是在Azure上的。
但是,如果直接对表使用LINQ,而不是使用LINQ的存储过程,我应该期望它比上面更快或更好吗?
我现在没有性能问题,但我确实需要在更多列上设置条件。我也想知道每次拉出所有行是否会花费我Azure CPU小时。
共享数据的最有效方法是部署OData服务。有一些OData客户端,比如datajs和Breeze.js,它们允许你以类似LINQ的方式来查询数据:它可以过滤、页面、排序,甚至缓存数据,并在服务器上更新数据。
谷歌"SQL Azure OData",你会发现如何这样做的信息:在Azure中创建和托管OData服务。
有关breeze的更多信息,请查看此处。Datajs提供的功能较少,但您也可以使用它。
BTW,我忘了说OData不支持类似LIKE的东西,但是你可以使用startswith
, endswith
和substringof
,它们覆盖了部分LIKE的情况。