请求将指定SQL语句转换为LINQ,现有LINQ代码无法运行
SQL转LINQ问题及解决方法
原始SQL语句
SELECT * FROM STK_Trans WHERE STORETO =2199 and STOREFR =2199 and TRANSDT BETWEEN '01/01/2023' AND '01/05/2023'
用户尝试的LINQ代码(无法正常运行)
from u in db.STK_Trans where u.STORETO == stto && u.STOREFR == stid && (u.TRANSDT >= datefrom && u.TRANSDT <= dateto) select u;
正确的LINQ实现
查询语法写法
var result = from trans in db.STK_Trans where trans.STORETO == 2199 && trans.STOREFR == 2199 && trans.TRANSDT >= new DateTime(2023, 1, 1) && trans.TRANSDT <= new DateTime(2023, 1, 5) select trans;
方法语法写法(更简洁)
var result = db.STK_Trans .Where(trans => trans.STORETO == 2199 && trans.STOREFR == 2199 && trans.TRANSDT >= new DateTime(2023, 1, 1) && trans.TRANSDT <= new DateTime(2023, 1, 5)) .ToList();
你的代码可能出问题的地方
- 变量值不匹配:检查
stto、stid是否确实等于2199,datefrom和dateto有没有转成正确的DateTime类型(比如字符串转日期时格式错误)。 - 日期带时间的情况:如果数据库里
TRANSDT是带时分秒的datetime类型,只给日期范围会漏掉当天晚些时候的数据,可以把dateto改成new DateTime(2023,1,5,23,59,59)来包含当天所有时间。 - 空值未处理:如果
TRANSDT允许为空,必须先判断是否有值再比较,不然会报错:where trans.STORETO == stto && trans.STOREFR == stid && trans.TRANSDT.HasValue && trans.TRANSDT.Value >= datefrom && trans.TRANSDT.Value <= dateto - ORM兼容问题:不同的ORM框架(比如EF Core、Linq to SQL)对日期的处理逻辑有差异,确保你的写法符合所用框架的要求。
内容的提问来源于stack exchange,提问作者Hasan Mamun
相关产品推荐
相关产品推荐

