В Swift 2:
import Foundation
let myArray = ["Step 6", "Step 12", "Step 10"]
extension String {
func extractIntFromEnd() -> Int? {
return self.componentsSeparatedByString(" ").last.flatMap{Int($0)}
}
}
let ans = myArray.sort {
(first, second) in
first.extractIntFromEnd() < second.extractIntFromEnd()
}
В Swift 1:
let myArray = ["Step 6", "Step 12", "Step 10"]
extension String {
func extractIntFromEnd() -> Int? {
return self.componentsSeparatedByString(" ").last.flatMap{$0.toInt()}
}
}
let ans = myArray.sorted {
(first, second) in
first.extractIntFromEnd() < second.extractIntFromEnd()
}
В обоих случаях этот массив:
let myArray = [
"Step 6" ,
"Step 12",
"Step 5" ,
"Step 14",
"Step 4" ,
"Step 11",
"Step 16",
"Step 9" ,
"Step 3" ,
"Step 13",
"Step 8" ,
"Step 2" ,
"Step 10",
"Step 7" ,
"Step 1" ,
"Step 15"
]
даст вам этот ответ:
["Step 1", "Step 2", "Step 3", "Step 4", "Step 5", "Step 6", "Step 7", "Step 8", "Step 9", "Step 10", "Step 11", "Step 12", "Step 13", "Step 14", "Step 15", "Step 16"]
(В версии Swift 2.0 вы должны быть в состоянии сделать last.flatMap(Int.init)
, но по какой-то причине это не работает для меня. ["1", "2"].flatMap(Int.init)
разбивает мою игровую площадку. Похож на ошибку.)
Таким образом, похоже, что EF Core в настоящее время не поддерживает отложенную загрузку. Это прибывает, но может быть некоторое время выключено.
На данный момент, если кто-то еще сталкивается с этой проблемой и борется. Ниже приведена демонстрация использования Eager loading , и это то, что вы сейчас должны использовать.
Скажем, до того, как у вас был объект person, и этот объект содержал список шляп в другой таблице.
Вместо того, чтобы писать
var person = _context.Person.Where(p=> p.id == id).ToList();
person.Hats.Where(h=> h.id == hat).ToList();
Вам нужно написать
var person = _context.Person.Include(p=> p.Hats).Where(p=> p.id == id).ToList();
И тогда person.Hats.Where(h=> h.id == hat).ToList();
будет работать
Если у вас есть несколько списков - включите в цепочку
var person = _context.Person.Include(p=> p.Hats).Include(p=> p.Tickets)
.Include(p=> p.Smiles).Where(p=> p.id == id).ToList();
Я понимаю, почему этот метод безопаснее, потому что вы не загружаете огромные наборы данных, которые могут замедлить работу. Но я надеюсь, что они скоро загрузят Lazy !!!
Caz
Ленивая загрузка теперь доступна на EF Core 2.1
, и вот ссылка на соответствующие документы:
https://docs.microsoft.com/en-us/ef/core/querying/ аффилированные данные # отложенная загрузка
Только что вышла предварительная версия , несмотря на то, что она должна быть доступна в полной версии в ближайшее время.
Несколько предостережений:
Эта строка добавляется в OnConfiguring для вашего контекста данных:
optionsBuilder.UseLazyLoadingProxies();
LazyLoading еще не поддерживается EF Core, но есть неофициальная библиотека, которая включает LazyLoading: https://github.com/darxis/EntityFramework.LazyLoading . Вы можете использовать его, пока он официально не поддерживается. Он поддерживает EF Core v1.1.1. Он доступен в виде пакета Nuget: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.LazyLoading/
Отказ от ответственности: Я владелец этого репо и приглашаю вас попробовать, сообщить о проблемах и / или внести свой вклад.
Ленивая нагрузка запланирована в EF core 2.1 - вы можете прочитать больше о том, почему это обязательная функция - здесь .
Для EF Core 2.1 и выше:
Установите:
dotnet add package Microsoft.EntityFrameworkCore.Proxies --version 2.2.4
Затем обновите файл Startup.cs, как указано ниже.
using Microsoft.EntityFrameworkCore.Proxies;
services.AddEntityFrameworkProxies();
services.AddDbContext<BlogDbContext>(options =>
{
options.UseSqlite(Configuration.GetSection("ConnectionStrings")["DefaultConnection"]);
options.UseLazyLoadingProxies(true);
});
вы можете установить этот пакет для включения отложенной загрузки в EF Core 2.1.
Microsoft.EntityFrameworkCore.Proxies
и затем установите этот конфиг в вашем ef dbContext
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer("myConnectionString");
«Обратите внимание», этот пакет работает на EF Core 2.1.