Linq-to-SQL - take not working
本文关键字:working not take Linq-to-SQL | 更新日期: 2023-09-27 18:11:09
我有这个代码c#代码在WCF服务:
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)也可以)
因为您在where子句上过滤之前而不是之后取前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);
正如Justin所说,您将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;
…除了使用你想要排序的属性