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)也可以)

Linq-to-SQL - take not working

因为您在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;

…除了使用你想要排序的属性