C# 使用LINQ和WebAPI时转换日期时间?
我在使用LINQ将从数据库收集的日期时间转换为本地时间时遇到问题。LINQ查询不允许我使用ToLocalTime(),而且我似乎无法在查询之外获得任何修复来处理匿名类型的列表 以下是来自控制器的LINQ查询:C# 使用LINQ和WebAPI时转换日期时间?,c#,linq,datetime,asp.net-web-api,C#,Linq,Datetime,Asp.net Web Api,我在使用LINQ将从数据库收集的日期时间转换为本地时间时遇到问题。LINQ查询不允许我使用ToLocalTime(),而且我似乎无法在查询之外获得任何修复来处理匿名类型的列表 以下是来自控制器的LINQ查询: // GET: api/Scan public object Getv_Update_ComplianceStatusAll() { var dato = DateTime.Now.AddYears(-1);
// GET: api/Scan
public object Getv_Update_ComplianceStatusAll()
{
var dato = DateTime.Now.AddYears(-1);
var scan = (from n in db.C_RES_COLL_NO9000AC
join s in db.v_Update_ComplianceStatusAll on n.MachineID equals s.ResourceID
join u in db.v_UpdateInfo on s.CI_ID equals u.CI_ID
join c in db.v_CICategoryInfo on u.CI_ID equals c.CI_ID
where (n.MachineID == s.ResourceID) && (u.DateRevised > dato)
group s by new { n.Name } into grp
select new
{
Name = grp.Key.Name,
StatusScan = grp.Max(t=> t.LastStatusCheckTime)
});
return scan;
}
这是我在查询外部修复时的尝试:
var newScan = scan.ToList();
foreach (var s in newScan)
{
s.StatusScan = s.StatusScan.ToLocalTime();
}
return newScan;
对话正常,但返回“错误306属性或索引器'AnonymousType#1.StatusScan'无法分配给--它是只读的”
那么,如何在控制器中将UTC转换为本地时间(在我将任何内容返回到网站之前)
您的新闻扫描是一个列表,无法直接分配
s.StatusScan = s.StatusScan.ToLocalTime();
是的,匿名类型很方便,但是从方法返回它是个坏主意——局外人不知道
对象的实际内容。建议创建一个强类型来存储结果并返回IEnumerable
。然后您可以修改结果
public class ScanItem
{
public string Name { get; set; }
public datetime StatusScan { get; set; }
}
如果必须使用匿名类型
,则可以像这样构建一个新列表
scan.ToList().Select(i => new {Name = i.Name, StatusScan = i.StatusScan.ToLocalTime()});
您尝试过使用强类型变量吗?即:创建ViewModel?需要服务器本地时间还是客户端本地时间?谢谢!这对我帮助很大
scan.ToList().Select(i => new {Name = i.Name, StatusScan = i.StatusScan.ToLocalTime()});