Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ和WebAPI时转换日期时间?_C#_Linq_Datetime_Asp.net Web Api - Fatal编程技术网

C# 使用LINQ和WebAPI时转换日期时间?

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);

我在使用LINQ将从数据库收集的日期时间转换为本地时间时遇到问题。LINQ查询不允许我使用ToLocalTime(),而且我似乎无法在查询之外获得任何修复来处理匿名类型的列表

以下是来自控制器的LINQ查询:

                    // 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()});