Linq-to-SQL - 不工作

时间:2011-10-12 17:55:24

标签: c# sql linq-to-sql .net-4.0

我在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))

2 个答案:

答案 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;

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