包含日期的字符串上的 Linq 大于和小于运算符
本文关键字:小于 大于 运算符 日期 字符串 包含 Linq | 更新日期: 2023-09-27 18:34:18
我正在我的应用程序中编写一个 linq 查询,我想在其上使用"小于"运算符。 但是,我尝试将其应用于的列是字符串类型(我们无法更改),并且导致智能感知引发错误,因为"<"运算符不能用于字符串类型。
我的问题是我还能怎么做? 这是我的代码中发生错误的部分。
public ActionResult Index()
{
var results = Mapper.Map<IEnumerable<VesselViewModel>>(db.tbl_vessels
.Where(p =>
(p.vessel_type.Contains("AHTS")) &&
(p.spotlist_id == 2) &&
(p.fixture_start <= System.DateTime.Now.Date)
)
.ToList());
return View(results);
}
fixture_start
是一个字符串,由于其他地方的复杂性,我们无法更改它。这个问题有办法吗?
如果p.fixture_start
是包含日期的字符串,那么您必须在比较之前解析它:
(p => DateTime.Parse(p.fixture_start) <= System.DateTime.Now.Date)
即使不能更改fixture_start的类型,也可以将其解析为 DateTime,仅用于查询:
(DateTime.Parse(p.fixture_start) <= System.DateTime.Now.Date)
这不是一个选择吗?
好吧,解决方案可能是使用 Linq to Entities 执行部分查询,并使用 Linq to Object 结束查询,您可以在其中将string
转换为DateTime
:
var results = Mapper.Map<IEnumerable<VesselViewModel>>(db.tbl_vessels
.Where(p =>
(p.vessel_type.Contains("AHTS")) &&
(p.spotlist_id == 2))
.AsEnumerable()// This should make the trick
.Where(p => DateTime.Parse(p.fixture_start) <= System.DateTime.Now.Date)
.ToList());
如果fixture_date是一个字符串。您应该将其与字符串进行比较。如果这是在数据库中存储为字符串的日期,则应将其存储为 yyyymmdd。如果是这种情况,则可以将其与以相同方式格式化的当前日期进行比较。您将能够使用小于来比较两个字符串。
p.fixture_date <= System.DateTime.Now.ToString("yyMd") // not sure this format is correct