我不知道是否有可能(以及如何)提供的Objective-C類的東西,如:在Objective-C中是否有類似於LINQ的東西?
Person.Select(@"Name").OrderAsc(@"Name").Where(@"Id").EqualTo(1).And(@"Id").NotEqualTo(2).Load<Array>
這可能是一個項目,我做的非常得心應手。
我喜歡這種編碼方式存在於Django & SubSonic。
我不知道是否有可能(以及如何)提供的Objective-C類的東西,如:在Objective-C中是否有類似於LINQ的東西?
Person.Select(@"Name").OrderAsc(@"Name").Where(@"Id").EqualTo(1).And(@"Id").NotEqualTo(2).Load<Array>
這可能是一個項目,我做的非常得心應手。
我喜歡這種編碼方式存在於Django & SubSonic。
簡短的回答是Objective-C沒有Linq的等價物,但是你可以用一個包裝類來混合SQLite,NSPredicate和CoreData調用。您可能對core data guide,predicate guide和this example code感興趣。
從上面的謂詞指南:
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employee"
inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// assume salaryLimit defined as an NSNumber variable
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"salary > %@", salaryLimit];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
有一個動作比較Windows和Cocoa的做法。可可使用關鍵路徑和NSPredicate ....
我認爲,具體到您的例子,這會是可可中的等價物:
NSArray *people = /* array of people objects */
NSPredicate *pred = [NSPredicate predicateWithFormat:@"Id = 1 AND Id != 2"];
NSSortDescriptor *byName = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject:[byName autorelease]];
NSArray *matches = [people filteredArrayUsingPredicate:pred];
NSArray *sortedMatches = [matches sortedArrayUsingDescriptors:descriptors];
NSArray *justNames = [sortedMatches valueForKey:@"Name"];
這是一個有點比LINQ例子更詳細和我的一些線條可能已經組合起來了,但在我看來這更容易解析。
查閱以下存儲庫:https://github.com/ziminji/objective-c-sql-query-builder
這些類提供了一組方便的方法可用於快速構建良好的SQL查詢SQLite的。由於它們遵循基本的SQL語法,因此它們使用起來相當簡單並且相對簡單。
我爲Objective C創建了我自己的Linq樣式的API,它是available on github。你的具體例子是這個樣子:
NSArray* results = [[[people where:^BOOL(id person) {
return [person id] == 1 && [person id] != 2;
}]
select:^id(id person) {
return [person name];
}]
sort];
我的項目,LINQ4Obj-C,港口LINQ標準查詢經營者的Objective-C。
你可以在github及其docs here找到它。該庫也可通過CococaPods獲得。
該項目的源代碼是根據標準的MIT許可證提供的。
你的例子將如下這樣:
id results = [[[people linq_where:^BOOL(id person) {
return ([person ID] == 1);
}] linq_select:^id(id person) {
return [person name];
}] linq_orderByAscending];
NB我刪除第二個條件,因爲它是沒有意義的(ID = 2!)。
目前該庫爲集合類提供擴展方法(類別),但將來我還會將其功能擴展爲NSManagedObjectContext
以提供對Core Data的直接查詢訪問。
我很喜歡Objective-C中的LINQ等價物。有人應該寫一個! – 2010-05-11 18:08:42
@JonathanSterling - 我有! https://開頭github上。com/ColinEberhardt/LinqToObjectiveC – ColinE 2013-02-15 22:01:38