You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:50:22