包含日期的字符串上的 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是一个字符串,由于其他地方的复杂性,我们无法更改它。这个问题有办法吗?

包含日期的字符串上的 Linq 大于和小于运算符

如果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
相关文章: