список пустой? EF Core, SQLite
public void FilterByAddress(IQueryable<AddressModel> addresses)
{
string street = _filter.Address.Street.ToLower();
string house = _filter.Address.House.ToLower();
string apartment = _filter.Address.Apartment.ToLower();
var f = _accounts
.Join(addresses, account => account.AddressId, address => address.Id,
(account, address) => new { Account = account, Address = address });
var g = f.Where(joined => joined.Address.Street.ToLower() == street);
}
Возможно нужно прописать Include, т.к. Address внешняя таблица
Так? var f = _accounts .Include(account => account.Address) .Join(addresses, account => account.AddressId, address => address.Id, (account, address) => new { Account = account, Address = address });
Всё так-же
Да и в OnModelCreating добавил modelBuilder.Entity<AccountModel>() .HasOne(account => account.Address) .WithOne() .HasForeignKey<AccountModel>(account => account.AddressId);
А почему не указано с чем связь WithOne(...) ?
А что там указать? Address?
А чо, точно пустой g? Как определили? Дальшнейшие какие-то действия с есть с переменной? 🤔
Ссылку на Account в модели Address
modelBuilder.Entity<AccountModel>() .HasOne(account => account.Address) .WithOne(address => address.Account) .HasForeignKey<AccountModel>(account => account.AddressId); public class AddressModel { [JsonIgnore] public int Id { get; set; } [JsonIgnore] public AccountModel Account { get; set; } [Required] public string Street { get; set; } [Required] public string House { get; set; } [Required] public string Apartment { get; set; } }
Делал, пустой
Ну проверь, если появилось, значит так, если нет значит нет
Не появилось :/
Account должно быть virtual
Не помогло
убери тут джойн, оставь только инклуд
Но всё ещё пусто
джойн то теперь один в sql?
.param set @__street_0 'пп' SELECT "a"."Id", "a"."AccountNumber", "a"."AddressId", "a"."EndDate", "a"."RoomArea", "a"."StartDate", "a0"."Id", "a0"."Apartment", "a0"."House", "a0"."Street" FROM "Accounts" AS "a" INNER JOIN "Addresses" AS "a0" ON "a"."AddressId" = "a0"."Id" WHERE lower("a0"."Street") = @__street_0
а теперь бери этот sql, открой коннекшн с базой, и выполни его ручками, и посмотри что вернет
Не подскажешь как это сделать с SQLite?
dbeaver например?
https://sqliteonline.com
а, ну так вот, надо разобраться почему оно не работает
Спасибо, попытаюсь
Почему-то операция lower не делает нижний регистр
https://stackoverflow.com/questions/22343850/like-case-insensitive-for-not-english-letters оно?
Только наткнулся
Обсуждают сегодня