首页 > 解决方案 > C# 可以在操作数右侧使用 Func<> 重载运算符“>”吗?

问题描述

我正在编写一个流利的 API(一直在升级 EntitySpaces),我想要这个语法......

EmployeeQuery q = new EmployeeQuery("q");
q.Select(q.Id > () =>  // Notice Func<> syntax here, this won't compile !!!!
    {
        return new EmployeeQuery("e", out var q1)
        .Where(q1.Id.IsNotNull()).All();
    })
); 

但是你猜对了,编译错误。我重载了语法中的所有运算符,一切正常,但我无法让这个语法工作,我认为“>”后面跟着“()=>”语法只会完全混淆编译器,它永远无法真正工作?

请注意,上面的 Select() 方法中的“q.Id”返回一个 esQueryItem,因此下面的重载...

这是我的超载...

public class esQueryItem
{
    public static esComparison operator >(esQueryItem item, Func<esDynamicQuery> func)
    {
        return null;
    } 

    public static esComparison operator <(esQueryItem item, Func<esDynamicQuery> func)
    {
        return null;
    }
} 

标签: c#entityspaces

解决方案


Sinatr,你明白了,thanx ...我不想要最后一组“()”,因为我不想执行函数,函数 get 在 Func<> 本身内部执行,再次thanx

EmployeesQuery q = new EmployeesQuery("q");
q.Where(q.EmployeeID > (() =>
    {
        return new EmployeesQuery("e", out var q1)
        .Select(q1.EmployeeID)
        .Where(q1.EmployeeID.IsNotNull()).Any();
    })
);

这会产生...

SELECT * FROM [Employees] q 
WHERE q.[EmployeeID] > ANY 
(
    SELECT e.[EmployeeID] 
    FROM [Employees] e 
    WHERE e.[EmployeeID] IS NOT NULL
)

推荐阅读