我正在使用.NET Core 3.1、Microsoft.EntityFrameworkCore 3.1.9和Npgsql 4.1.9。我希望重用CompareBuilds
函数来比较Where(...)
语句中的2个Build
对象。我希望将该函数转换为SQL。
这是我目前拥有的功能:
public List<Ticket> GetTicketsForBuild(Build build)
{
Expression<Func<Build, Build, int>> CompareBuilds = (first, second) =>
// complex logic, simplified for the sake of example
first.Version == second.Version ? 0 : (first.Version < second.Version ? -1 : 1);
return _myDbContext.Ticket
.Where(x => CompareBuilds(x.BuildIntroducedIn, build) <= 0)
.Where(x => x.IsPublic ?
CompareBuilds(x.BuildResolvedIn, build) < 0 :
CompareBuilds(x.BuildResolvedIn, build) > 0)
.ToList();
}
但是,编译器在第一个Where
子句中给出了以下错误:
CS0149: Method name expected
如何重用同一个函数来比较Where
子句中的两个Build
对象?此外,该函数应该返回一个int
,就像代码片段中演示的那样。
1条答案
按热度按时间jgovgodb1#
首先激活LINQKit,只需要配置
DbContextOptions
即可:然后,您可以重复使用以下表达式:
但通常这样的函数在其他查询中很方便,我们可以用更通用的方式来做:
并在查询中重用:
还有其他的库做同样的事情,我已经收集了其中的一些here