EF Core Linq 查询 Select 与可能性列表匹配的行
EF Core Linq Query to Select Rows That Match From a List of Possibilities
假设一个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)
);
...但我不知道其中任何一个的效率如何。
我将如何编写使用 ohn
和 mit
有效匹配 "John"、"Johnathan"、"Smith"、"Smitty" 等的 linq 查询?
Entity Framework 的优点在于,当 C# 前端出现问题时,您可以随时使用原始 SQL。
var names = context.Names
.FromSqlRaw("select Name from Names where name like %{0}%", name)
.ToList();
假设一个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)
);
...但我不知道其中任何一个的效率如何。
我将如何编写使用 ohn
和 mit
有效匹配 "John"、"Johnathan"、"Smith"、"Smitty" 等的 linq 查询?
Entity Framework 的优点在于,当 C# 前端出现问题时,您可以随时使用原始 SQL。
var names = context.Names
.FromSqlRaw("select Name from Names where name like %{0}%", name)
.ToList();