Допустим DbSet<Thing> things
; и Thing
имеет свойство Name
.
Если я хочу получить список вещей, которые соответствуют списку имен, это довольно просто:
var names = new List<string>{"John", "Jacob", "Jinkelheimer", "Smith"};
return things.Where(t => names.Contains(t.name));
Однако что если Я хочу сопоставить список частичных вариантов имен?
var nameBits = (new List<string>{"ohn", "mit"}).ToLower();
// this doesn't seem good / right / efficient
things.Where(t => nameBits
.Select(bit => EF.Functions.Like(t.Name, $"%{bit}%")
.Any(m => m)
);
// I could also go with:
things.Where(t => nameBits
.Select(bit => t.Name.Contains(bit)).Any(m => m)
);
... но я не знаю, насколько эффективными будут какие-либо из них. Как бы я написал запрос linq, который бы эффективно соответствовал "Джону", "Джонатану", "Смиту", "Смитти" и т. Д. c, используя ohn
и mit
?