Оба плохи в том, что код можно переписать, чтобы использовать правильное соединение.Это сделало бы вызов 1 дБ вместо 1 вызова на категорию + 1 (для первоначального вызова).Но строго отвечая на ваш вопрос, это не имеет значения: выберите тот, который вам удобнее всего с
Проблема, с которой я столкнулся, заключается в том, что parentId часто дублируется, и я не могу использовать. Содержит
Вы можете использовать левое соединение, чтобы сделать то же самое, но все в одном вызове БД, что дешевле, чем 1 вызов на результат.
string lowerCasePartOfName = partOfName.ToLower();
var categories = await (from category in _context.ECATEGORIES.Where(a => a.NAME.ToLower().Contains(lowerCasePartOfName))
from parent in _context.ECATEGORIES.Where(parent => parent.ID == category.ParentId).DefaultIfEmpty()
select new Category
{
Id = category.ID,
CategoryParent = parent.NAME,
}).ToListAsync();
Если ваша схема настроена без учета регистра, тоВы также можете опустить вызовы ToLower
.Вы можете проверить это, посмотрев на COLLATION.
.Where(a => a.NAME.Contains(lowerCasePartOfName))