我在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();
}
拥有:
.Take(25)
如上所述,不返回任何报复。为什么这样? (没有.Take(25))
答案 0 :(得分:7)
因为你在过滤之前的前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);
答案 1 :(得分:5)
正如贾斯汀所说,你的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();
}
我更喜欢将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;
...除了使用你真正想要订购的任何财产外。