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

如何在Kendo Grid中按字符串值筛选整数字段?

解决Kendo Grid整数字段按字符串筛选的异常问题

问题原因

你遇到的异常是因为Kendo的ToDataSourceResult方法会自动将字符串筛选条件(比如包含"5")直接应用到long类型的TrackNumber字段上,尝试调用字符串的ToLower()方法,但整数类型没有这个方法,导致类型不匹配错误。

可行解决方案

方案一:后端手动转换筛选条件

在调用ToDataSourceResult之前,手动处理筛选器,将针对TrackNumber的字符串包含筛选转换为整数转字符串后的匹配逻辑。示例代码如下:

var request = DataSourceRequestModel.FromHttpContext(Request);
var query = _dbContext.BatchDetails.AsQueryable();

// 处理TrackNumber的字符串筛选
foreach (var filter in request.Filters.OfType<FilterDescriptor>())
{
    if (filter.Member == nameof(BatchDetail.TrackNumber) && filter.Operator == FilterOperator.Contains)
    {
        var searchValue = filter.Value.ToString();
        // 替换原筛选条件,用整数转字符串后的Contains逻辑
        query = query.Where(b => b.TrackNumber.ToString().Contains(searchValue));
        // 移除原筛选器,避免ToDataSourceResult再处理
        request.Filters.Remove(filter);
        break;
    }
}

var result = query.ToDataSourceResult(request);
return Json(result);

方案二:使用DTO映射字符串字段

创建一个包含字符串类型对应字段的DTO,将TrackNumber转换为字符串后供Grid筛选使用:

public class BatchDetailDto
{
    public long TrackNumber { get; set; }
    public string TrackNumberStr => TrackNumber.ToString();
}

// 查询时转换为DTO
var query = _dbContext.BatchDetails.Select(b => new BatchDetailDto
{
    TrackNumber = b.TrackNumber
}).AsQueryable();

// Grid绑定BatchDetailDto,筛选时用TrackNumberStr字段
var result = query.ToDataSourceResult(request);
return Json(result);

方案三:利用EF函数处理字符串转换(适用于Entity Framework)

如果使用EF,可以借助框架内置函数实现数据库层面的字符串匹配:

EF Core示例:

var searchValue = "5";
var query = _dbContext.BatchDetails
    .Where(b => EF.Functions.ToString(b.TrackNumber).Contains(searchValue));
var result = query.ToDataSourceResult(request);

EF6示例:

var searchValue = "5";
var query = _dbContext.BatchDetails
    .Where(b => SqlFunctions.StringConvert((double)b.TrackNumber).Contains(searchValue));
var result = query.ToDataSourceResult(request);

内容的提问来源于stack exchange,提问作者Hadi Jahangiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:10:31