搜索从x开始的int id实体框架4.1

本文关键字:实体 框架 id int 开始 搜索 | 更新日期: 2023-09-27 18:06:52

我目前有一个从遗留数据库收集数据的实体框架模型,我目前在我的Id属性上使用int

我正试图建立一个具有自动完成功能的搜索框,并希望具有自动完成功能,以根据样本id是否包含或开始(最终设计决策尚未做出)返回记录的子集,并且我遇到了将整数id转换为字符串的问题,因为我通常会使用recs.Id.toString().StartsWith(recordId),但这显然不支持实体框架

是否有办法绕过这个限制?

我的代码如下所示

模型:

public class Sample
{
  public Sample()
  {
      Tests = new List<Test>();
  }
public          int                     Id              { get; set; }
public          DateTime                SampleDate      { get; set; }
public          string                  Container       { get; set; }
public          string                  Product         { get; set; }
public          string                  Name            { get; set; }
public          string                  Status          { get; set; }
public virtual SamplePoint SamplingPoint { get; set; }
public virtual SampleTemplate SampleTemplate { get; set; }
public Customer ForCustomer { get; set; }
public virtual ICollection<Test> Tests { get; set; }
}

和我当前试图应用于此模型的查询

[HttpGet]
public JsonResult AutoComplete(string partialId)
{
    var filteredSamples = 
                repo.AllSamples.Where( s =>                                   
                                String.Compare(s.Status, "A", false) == 0
                                && (s.Id.ToString()).StartsWith(partialId)
                        ).ToList();
    return Json(filteredSamples, JsonRequestBehavior.AllowGet);
}

任何主意都很棒,我现在没有主意了

搜索从x开始的int id实体框架4.1

无论您做什么,这都将导致大型数据集的一些糟糕的性能,因为您将无法使用任何索引。我的建议是使用触发器或计划任务将前导数字存储在单独的字段中,并对其进行过滤。

我最终为自动完成数据添加了一个视图,并将数据转换为select语句中的字符串,这解决了我的问题

狂野的想法:如何创建一个计算,持久化列在您的数据库表,转换您的ID (INT)成字符串?

那么你可以:

  • 为该列添加索引
  • 对该字符串列使用一个简单的字符串比较

基本上,你需要这个:

ALTER TABLE dbo.YourTable
  ADD IDAsText AS CAST(ID AS VARCHAR(10)) PERSISTED

现在更新你的EF模型-现在你应该有一个新的string字段IDAsText在你的对象类。尝试针对该字符串字段运行自动完成比较。