首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在linq DateTime中正确设置变量?

如何在linq DateTime中正确设置变量?
EN

Stack Overflow用户
提问于 2019-06-24 02:42:42
回答 1查看 1.4K关注 0票数 2

我是编程新手,也是C#新手。最近,我一直在做一个从csv格式中过滤数据的工具。我发现使用linq是我最好的选择。正如你所看到的,这一段下面的代码运行良好,但我想让它更灵活。我想问的是,有没有更聪明的方法使:DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, s.Date.Second)作为一个变量,用户可以选择它作为一个选项。现在,我已经编写了代码,其中用户选择选项,并基于变量:PublicVariables.customfiltersetting == 5我正在使用条件来设置我的排序...下面是代码的其余部分:

代码语言:javascript
复制
using (var writer = new StreamWriter(outputname))
{
    var ordering = from s in Filter.FullData()
        group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, s.Date.Second)
        into g
        let count = g.Count()
        orderby g.Key descending
        select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};

    if (PublicVariables.customfiltersetting == 0)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, s.Date.Second)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else if (PublicVariables.customfiltersetting == 1)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else if (PublicVariables.customfiltersetting == 2)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, 0, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else if (PublicVariables.customfiltersetting == 3)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, 0, 0, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else if (PublicVariables.customfiltersetting == 4)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, 0, 0, 0, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else if (PublicVariables.customfiltersetting == 5)
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, 0, 0, 0, 0, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }
    else
    {
        ordering = from s in Filter.FullData()
            group s by new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, 0)
            into g
            let count = g.Count()
            orderby g.Key descending
            select new {Date = g.Key, Column = g.Average(s => s.Column), Count = count};
    }

    foreach (var s in ordering)
    {
        Console.WriteLine(s.Date + "\t" + s.Column + "\t " + s.Average + "\t " + s.Count);
        writer.WriteLine("Date: " + strings.Value + " Value: " + strings.Average.ToString("0.00") + "\t" +
                         " Count: " + strings.Count);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 06:20:34

暂时忽略代码中的问题,比如未声明的strings变量,以及使用非法的0值作为DateTime的月份和月日值的默认值,您可能会发现代码读起来会更好一些:

代码语言:javascript
复制
Func<MyDataType, DateTime> selectKey;

switch (PublicVariables.customfiltersetting)
{
    case 0:
        goto default;
    case 1:
        selectKey = s => new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, 0);
        break;
    case 2:
        selectKey = s => new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, 0, 0);
        break;
    case 3:
        selectKey = s => new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, 0, 0, 0);
        break;
    case 4:
        selectKey = s => new DateTime(s.Date.Year, s.Date.Month, 1, 0, 0, 0);
        break;
    case 5:
        selectKey = s => new DateTime(s.Date.Year, 1, 1, 0, 0, 0);
        break;
    default:
        selectKey = s => new DateTime(s.Date.Year, s.Date.Month, s.Date.Day, s.Date.Hour, s.Date.Minute, s.Date.Second);
        break;
}

var ordering = from s in Filter.FullData()
               group s by selectKey(s) into g
               let count = g.Count()
               orderby g.Key descending
               select new { Date = g.Key, Column = g.Average(s => s.Column), Count = count };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56726846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档