Linq 中 ElementAtOrDefault() 的替代 Sql

Alternative of ElementAtOrDefault() in Linq to Sql

我想运行以下查询,但它说不支持 ElementAt。

List<Road> rdExist = (from u in db.Roads where (u.GPScoordinates.ElementAtOrDefault(0).Latitude == lattitude1 && u.GPScoordinates.ElementAtOrDefault(0).Longitude == longitude1) && (u.GPScoordinates.ElementAtOrDefault(1).Latitude == lattitude2 && u.GPScoordinates.ElementAtOrDefault(1).Longitude == longitude2) select u).ToList();

有人可以提出替代方案吗?我自己也想不通。 FirstOrDefault 工作正常,但在这个查询中无法帮助我。

你可以使用Skip & FirstOrDefault:-

List<Road> rdExist = (from u in db.Roads where
  (u.GPScoordinates.FirstOrDefault().Latitude == lattitude1 &&
   u.GPScoordinates.FirstOrDefault().Longitude == longitude1) &&
  (u.GPScoordinates.Skip(1).FirstOrDefault().Latitude == lattitude2 &&
   u.GPScoordinates.Skip(1).FirstOrDefault().Longitude == longitude2) select u).ToList();
LINQ-SQL 不支持

ElementAtOrDefault。检查 this.

此外,使用此查询时请小心,因为在默认值的情况下可能会导致 Null reference exception。因此,最好在检索值之前检查空值。

尝试用 Skip(n).FirstOrDefault() 代替 ElementAtOrDefault(n)。这基本上意味着 "get the first element after skipping n elements",这与 "get element at position n" 大致相同,在后一种情况下 n0 开始:

List<Road> rdExist = (from u in db.Roads 
                      where (u.GPScoordinates
                              .FirstOrDefault().Latitude == lattitude1 && 
                             u.GPScoordinates
                              .FirstOrDefault().Longitude == longitude1) && 
                            (u.GPScoordinates
                              .Skip(1).FirstOrDefault().Latitude == lattitude2 && 
                             u.GPScoordinates
                              .Skip(1).FirstOrDefault().Longitude == longitude2) 
                      select u).ToList();