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