EF Core Linq Query для выбора строк, которые соответствуют из списка возможностей - PullRequest
1 голос
/ 29 января 2020

Допустим 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?

1 Ответ

1 голос
/ 30 января 2020

Отличительной особенностью Entity Framework является то, что вы всегда можете перейти на raw SQL, когда что-то не работает на C# фронте.

var names = context.Names
    .FromSqlRaw("select Name from Names where name like %{0}%", name)
    .ToList();

Writing Raw SQL Запросы в Entity Framework Core

...