Dan*_*ell 2 c# sql .net-4.0 linq-to-sql
我在WCF服务中有这个代码C#代码:
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var members = from member in db.Stops_edited_smalls.Take(25)
where Math.Abs(Convert.ToDouble(member.Latitude) - curLatitude) < 0.05
&& Math.Abs(Convert.ToDouble(member.Longitude) - curLongitude) < 0.05
select member;
return members.ToList();
}
Run Code Online (Sandbox Code Playgroud)
拥有:
.Take(25)
Run Code Online (Sandbox Code Playgroud)
如上所述,不返回任何报复.为什么这样?(没有.Take(25))它工作正常
因为你在过滤之前的前25个而不是之后.这25条记录中没有一条与where子句匹配.
如果您只想要前25个结果,则应将调用移至Take():
var members = (from member in db.Stops_edited_smalls
where Math.Abs(Convert.ToDouble(member.Latitude)
- curLatitutde) < 0.05
&& Math.Abs(Convert.ToDouble(member.Longitude)
- curLongitude) < 0.05
select member).Take(25);
Run Code Online (Sandbox Code Playgroud)
正如贾斯汀所说,你已经把你Take的地方弄错了.这就像说"在字典中查找前25个单词,然后过滤掉不以B开头的任何内容".这不是你如何找到以B开头的前25个单词.你可能只想要:
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var members =
from member in db.Stops_edited_smalls
where Math.Abs(Convert.ToDouble(member.Latitude) - curLatitude) < 0.05
&& Math.Abs(Convert.ToDouble(member.Longitude) - curLongitude) < 0.05
select member;
return members.Take(25).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢将Take调用分别放到查询表达式中,只是为了便于阅读.两者都可以工作,这确实执行数据库中的"仅前25个值",而不是本地.
鉴于您只想要"第一"25行,您应该指定一个排序,例如
var members =
from member in db.Stops_edited_smalls
where Math.Abs(Convert.ToDouble(member.Latitude) - curLatitude) < 0.05
&& Math.Abs(Convert.ToDouble(member.Longitude) - curLongitude) < 0.05
orderby member.Latitude
select member;
Run Code Online (Sandbox Code Playgroud)
......除了使用你真正想要订购的任何财产.