搜索从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);
}
任何主意都很棒,我现在没有主意了
无论您做什么,这都将导致大型数据集的一些糟糕的性能,因为您将无法使用任何索引。我的建议是使用触发器或计划任务将前导数字存储在单独的字段中,并对其进行过滤。
我最终为自动完成数据添加了一个视图,并将数据转换为select语句中的字符串,这解决了我的问题
狂野的想法:如何创建一个计算,持久化列在您的数据库表,转换您的ID
(INT
)成字符串?
那么你可以:
- 为该列添加索引
- 对该字符串列使用一个简单的字符串比较
基本上,你需要这个:
ALTER TABLE dbo.YourTable
ADD IDAsText AS CAST(ID AS VARCHAR(10)) PERSISTED
现在更新你的EF模型-现在你应该有一个新的string
字段IDAsText
在你的对象类。尝试针对该字符串字段运行自动完成比较。