我正在我的应用程序中编写一个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
是一个字符串,由于其他地方的复杂情况,我们无法对其进行更改。反正有这个问题吗?
答案 0 :(得分:4)
如果p.fixture_start
是包含日期的字符串,那么您必须在比较前解析它:
(p => DateTime.Parse(p.fixture_start) <= System.DateTime.Now.Date)
答案 1 :(得分:0)
即使您无法更改fixture_start的类型,您也可以将其解析为DateTime,仅用于查询:
(DateTime.Parse(p.fixture_start) <= System.DateTime.Now.Date)
不是这个选项吗?
答案 2 :(得分:0)
好吧,解决方案可能是使用Linq to Entities执行部分查询,并使用Linq to Objects结束查询,您可以将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());
答案 3 :(得分:0)
如果fixture_date是一个字符串。您应该将它与字符串进行比较。如果这是在数据库中存储为字符串的日期,则应将其存储为yyyymmdd。如果是这种情况,那么您可以将其与以相同方式格式化的当前日期进行比较。您将能够使用少于比较两个字符串。
p.fixture_date <= System.DateTime.Now.ToString("yyMd") // not sure this format is correct