gpt4 book ai didi

c# - Linq 中的 Convert.ToDateTime

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:55 25 4
gpt4 key购买 nike

我想生成类似这种SQL语句的LINQ语句

SELECT *
FROM dbo.tbl_Advertisement
WHERE FileName LIKE '%latest%'
AND ToDate = (SELECT min(ToDate)
FROM dbo.tbl_Advertisement
WHERE CAST (getdate() AS DATE) <= CAST (Todate AS DATE)
AND FromDate = (SELECT max(FromDate)
FROM dbo.tbl_Advertisement
WHERE CAST (getdate() AS DATE) >= CAST (FromDate AS DATE)));

我生成的 Linq 语句如下:

objAdvList = objAdvList
.Where(x => x.ToDate == Convert.ToDateTime(objAdvList
.Where(y => y.FromDate == Convert.ToDateTime(objAdvList.Max(z => z.FromDate)))
.Select(y => y.FromDate)
))
.Select(x => x)
.ToList();

其中objAdvList是一个List类型的集合

class AdvertisementAccess
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public string FileName { get; set; }
public string Path { get; set; }
}

但是这段代码给我一个错误信息如下:

Unable to cast object of type 'WhereSelectListIterator`2[AdvertisementAccess,System.DateTime]' to type 'System.IConvertible'.

有人能解决我的问题吗?

问候,马亚克

最佳答案

您的内部查询会产生一组结果。但是,Convert.ToDateTime 正在寻找单个值。您可以使用 SingleFirstLast 从内部查询生成的这组值中选择一个值。

要使用 Single 检索内部 LINQ 查询的唯一结果,请尝试以下代码:

objAdvList = objAdvList
.Where(x => x.ToDate == objAdvList
.Where(y => y.FromDate == Convert.ToDateTime(objAdvList.Max(z => z.FromDate)))
.Select(y => y.FromDate).Single()
)
.ToList();

或者,如果您需要从可能性列表中选择第一个结果,请改用 First:

objAdvList = objAdvList
.Where(x => x.ToDate == objAdvList
.Where(y => y.FromDate == Convert.ToDateTime(objAdvList.Max(z => z.FromDate)))
.Select(y => y.FromDate).First()
)
.ToList();

无论哪种情况,我都删除了 .Select(x => x) 表达式,它什么都不做。此表达式将仅选择所有值 x 并返回未转换的值。

我还删除了对 Convert.ToDateTime 的调用,因为您已经在比较两个日期。您不需要将日期值转换为日期。

关于c# - Linq 中的 Convert.ToDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17526726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com