我想运行以下查询,但它表示不支持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工作正常,但在查询中无法帮助我。
答案 0 :(得分:1)
您可以使用Skip&amp; 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
。因此,在检索值之前,最好检查空值。
答案 1 :(得分:1)
尝试Skip(n).FirstOrDefault()
代替ElementAtOrDefault(n)
。这基本上意味着“在跳过n
元素后获取第一个元素”,与“在位置n
获取元素”大致相同,后者n
从0
开始}:
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();