EF Core Linq 查询 Select 与可能性列表匹配的行

EF Core Linq Query to Select Rows That Match From a List of Possibilities

假设一个DbSet<Thing> thingsThing 有一个 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)
);

...但我不知道其中任何一个的效率如何。 我将如何编写使用 ohnmit 有效匹配 "John"、"Johnathan"、"Smith"、"Smitty" 等的 linq 查询?

Entity Framework 的优点在于,当 C# 前端出现问题时,您可以随时使用原始 SQL。

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

Writing Raw SQL Queries in Entity Framework Core