c# - Linq to SQL 处理可空值
问题描述
我有一个旧版 SQL 脚本,通过比较日期范围 low_amt 和 high_amt 的天数,将 prob_contact 表与其他表连接起来。这与 SQL 完美配合。
JOIN prob_contact p ON (s.end_date - s.start_date) BETWEEN p.low_amt AND p.high_amt
我想将 SQL 脚本转换为 Linq,但在可为空的 TimeSpan 上遇到问题?请让我知道是否有解决此问题的方法。
let d = s.End_date - s.Start_date
Original T-SQL Command (datasource Oracle 12c by Joan Casteel)
SELECT (c.last + ', ' + c.first) AS name, s.start_date, s.end_date, p.con_freq
FROM dbo.criminals c INNER JOIN dbo.sentences s ON c.criminal_id = s.criminal_id
INNER JOIN dbo.prob_officers o ON o.prob_id = s.prob_id
JOIN prob_contact p ON (s.end_date - s.start_date) BETWEEN p.low_amt AND p.high_amt
ORDER BY name, s.start_date;
Linqpad script
var result = from c in Criminals
join s in Sentences on c.Criminal_id equals s.Criminal_id
let d = s.End_date - s.Start_date
from p in Prob_contacts where d < p.Low_amt
orderby c.Last
select new {
name = c.Last + ", " + c.First,
startDate = s.Start_date,
freq = p.Con_freq,
d
};
解决方案
我希望我正确理解了您的要求。错误(在发布答案后编辑之前包含在 OP 中的屏幕截图中)被抛出,因为您正在将 a TimeSpan
(d 是查询中的 TimeSpan)与Int32
. 根据您给出的描述,您想将天数与 Low_amt 进行比较
你需要的是TimeSpan.TotalDays
from p in Prob_contacts where d.Value.TotalDays < p.Low_amt //(.Value) Since it is nullable as suggested in the error
推荐阅读
- automation - 使用 Pipedream,我如何从 HTTP 触发器中获取名称和内容标签?
- vue.js - 从 vue.js json 父组件继承子组件
- javascript - React Native - 使用 Expo Audio 在录制声音的同时播放声音
- javascript - vue-cli 使用官方 pwa 插件创建的网站在离线模式下不起作用
- php - laravel + mssql 应用推荐的服务器规范
- python - 为什么我在训练数据时会收到此错误?
- node.js - 中间件不起作用,尽管给出了下一个语句
- python - 如何使用 SymPy 求解两个变量方程以使其依赖于一个变量?
- python - 在 pandas 中插入数据
- python - 获取单个模型的多个查询集列表