c# - 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;
}
}
解决方案
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
)
推荐阅读
- jquery - 所有缩略图上的文本的“阅读更多”和“少读”脚本,而不仅仅是一个
- r - 在某个索引后比较 R 数据框中的值
- xml - 为什么 XSD 日期类型将 YYYYY-MM-DD 视为有效日期?
- c++ - 按下某个键
- security - VSTS OAuth 令牌中存在哪些声明?
- influxdb - InfluxDB 如何进行连续查询,收集存储在表中的唯一标记值
- python - 如何在 Python 中录制音频?
- javascript - 为什么我们应该更喜欢 document.visibilityState 而不是 document.hidden?
- java - JavaFX一键切换不同场景
- jquery - 角度扫描仪检测 2+