如何编写具有不同优先级的Lambda表达式? [已关闭]

问题描述 投票:0回答:1

这是数据库中的字符串列表:

abc
adewx
abse
abwwe
aceldfg
acbnret
ab

我想获取列表中内容为ab且内容以ab开头的前两条数据。内容为ab这个条件是最重要的。事实上,这份清单的内容非常大。出于性能考虑,我不想重复查询两次,也不可能将数据库中的所有数据导入到内存中进行遍历。有什么办法可以一次性完成吗?

例如,根据我上面列出的列表,我想要获取的数据是“ab”,“abc”,而不是“abc”,“abse”

事实上,我正在研究类似搜索的功能。字符串完全匹配肯定会优先级最高,字符串部分匹配肯定排在最后,所以就有了我说的这个。

c# lambda entity-framework-core
1个回答
0
投票

我认为在EF中你可以使用

Like
扩展方法。未经测试,但也许有效:

var result = db.TableName
        .Select(x => new {
            Content = x.Content,
            IsPerfectMatch = x.Content == "ab", 
            IsMatch = EF.Functions.Like(x.Content, "ab%")
        })
        .Where(x => x.IsMatch)
        .OrderBy(x => x.IsPerfectMatch ? 0 : 1)
        .Select(x => x.Content)
        .Take(2);
© www.soinside.com 2019 - 2024. All rights reserved.