Linq-to-SQL - 不工作

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))它工作正常

Jus*_*ner 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);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 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();
}
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)

......除了使用你真正想要订购的任何财产.