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

使用DateTime时LinQ中无Contains方法?SQL转LinQ日期查询求助

解决DateTime类型在LINQ中无Contains方法及SQL转LINQ的问题

为什么DateTime找不到Contains方法?

首先得理清楚:Contains是给集合类型(比如List<T>)判断元素是否存在,或者给字符串类型判断子串用的工具方法。而DateTime是值类型,本身并没有内置这个方法——你实际要实现的是SQL里LIKE '%日期%'的模糊匹配逻辑,本质上需要把日期转换为字符串后再做包含判断。

你的SQL对应的LINQ实现

原SQL语句:

SELECT * FROM [ReplicacionSigob].[dbo].[v_cbs01] where tramite_fecha_fin like '%2017-04-11%'

下面分两种常用场景给出具体实现:

1. 操作数据库(Entity Framework/LINQ to SQL)

如果是直接通过EF的DbContext操作数据库(比如dbContext.v_cbs01),有两种写法可选:

// 写法1:将日期转为指定格式字符串后用Contains
var targetDateStr = "2017-04-11";
var results = dbContext.v_cbs01
    .Where(item => item.tramite_fecha_fin.ToString("yyyy-MM-dd").Contains(targetDateStr))
    .ToList();

// 写法2:EF Core推荐用EF.Functions.Like,更贴近原生SQL的LIKE逻辑
var results = dbContext.v_cbs01
    .Where(item => EF.Functions.Like(item.tramite_fecha_fin.ToString("yyyy-MM-dd"), $"%{targetDateStr}%"))
    .ToList();

2. 操作内存中的集合(LINQ to Objects)

如果数据已经加载到本地内存(比如List<v_cbs01>),直接转换字符串判断即可:

var targetDateStr = "2017-04-11";
var results = yourInMemoryList
    .Where(item => item.tramite_fecha_fin.ToString("yyyy-MM-dd").Contains(targetDateStr))
    .ToList();

额外注意事项

  • 日期格式要统一:转字符串时必须指定明确格式(比如yyyy-MM-dd),避免因系统默认日期格式差异导致匹配失败(比如4/11/2017和2017-04-11就无法匹配)。
  • 性能优化建议:如果你的实际需求是匹配某一天的所有记录,别用模糊匹配!改用日期范围查询性能会好很多,还能利用数据库的日期索引:
    var targetDate = new DateTime(2017, 4, 11);
    var results = dbContext.v_cbs01
        .Where(item => item.tramite_fecha_fin >= targetDate && item.tramite_fecha_fin < targetDate.AddDays(1))
        .ToList();
    

内容的提问来源于stack exchange,提问作者Jose Angel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:09:45