如何使用CoreData执行计算查询

时间:2010-03-09 14:55:39

标签: iphone core-data

我有一个T-SQL背景,所以这个CoreData的东西对我来说有点新鲜。

我正在构建一个应用程序原型,最终将使用MS SQL后端Web服务进行查询。

在我的后端,我的t-sql查询将是这样的:

SELECT *, SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude)) Distance
FROM Locations 
WHERE latitude > myX 
AND latitude < myX + deltaX
AND longitude >  myX 
AND latitude < myY + deltaY
ORDER BY SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude))

如何使用谓词在我的原型中在CoreData中执行相同的查询(如果那是最好的方法)

N.B。它更多的是我感兴趣的订单

1 个答案:

答案 0 :(得分:3)

首先,要意识到Core Data首先是一个对象层次结构。因此,您不请求列,您请求对象。

有了这个,你可能希望构造一个带有NSFetchRequest的{​​{1}},并且谓词将是:

NSPredicate

您也可以向[NSPredicate predicate withFormat:@"latitude > %@ AND latitude < %@ AND longitude > %@ and longitude < %@", someFloatObject1, someFloatObject2, someFloatObject3, someFloatObject4]; 添加排序,但您无法在排序中进行计算。因此,您可能希望在获取对象后执行排序。

更新

您可以在对象上拥有瞬态属性,然后使用类似'-updateDistanceCalFrom:someFloat`的方法。然后,使用一组对象,您可以执行以下操作:

NSFetchRequest