C#是否可以在操作数右侧用Func <>重载运算符“>”?

时间:2019-12-19 15:22:39

标签: c# entityspaces

我正在写一个流畅的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();
    })
); 

但是您猜对了,编译错误。我在语法中重载了所有运算符,并且一切正常,但是我无法使该语法正常工作,我认为“>”后跟“()=>”语法只会使编译器完全混乱,并且它实际上无法正常工作吗? / p>

请注意,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;
    }
} 

1 个答案:

答案 0 :(得分:0)

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
)