【问题标题】:I can't get the result of a Generic List query我无法获得通用列表查询的结果
【发布时间】:2019-06-05 21:55:18
【问题描述】:
public class UTCTime
{
    public DateTime UTCBas { get; set; }
    public DateTime UTCSon { get; set; }
    public TimeSpan Fark { get; set; }
    public char Sezon { get; set; }

    public UTCTime(string UTCStart , string UTCStop , string Fark , char Sezon)
    {
        this.UTCBas = Convert.ToDateTime(UTCStart);
        this.UTCBas = Convert.ToDateTime(UTCStop);
        this.Fark = TimeSpan.Parse(Fark);
        this.Sezon = Sezon;
    }

    public override string ToString()
    {
        return $"{this.UTCBas.ToString(@"yyy-MM-dd")} - {this.UTCBas.ToString(@"yyy-MM-dd")} - {this.Fark} - {this.Sezon}";
    }
}

我正在将此数据从此类输入到通用列表中。

public static void MTDoldur()
{
    MarketTime.Add(new UTCTime("2000-04-01", "2000-10-28", "03:00", 'Y'));
    MarketTime.Add(new UTCTime("2000-10-28", "2001-03-31", "02:00", 'K'));
    MarketTime.Add(new UTCTime("2001-03-31", "2001-10-27", "03:00", 'Y'));
    MarketTime.Add(new UTCTime("2001-10-27", "2002-04-06", "02:00", 'K'));
    MarketTime.Add(new UTCTime("2002-04-06", "2002-10-26", "03:00", 'Y'));
    MarketTime.Add(new UTCTime("2002-10-26", "2003-04-05", "02:00", 'K'));
    MarketTime.Add(new UTCTime("2003-04-05", "2003-10-25", "03:00", 'Y'));
    MarketTime.Add(new UTCTime("2003-10-25", "2004-04-03", "02:00", 'K'));
}

我想将 LINQ 查询的结果添加到将从此类创建的通用列表中。

public class SonucTime
{
    public TimeSpan Fark { get; set; }
    public char Sezon { get; set; }

    public SonucTime(TimeSpan Fark , char Sezon)
    {
        this.Fark = Fark;
        this.Sezon = Sezon;
    }

    public override string ToString()
    {
        return $"Fark : {this.Fark}   Sezon : {this.Sezon}";
    }
}

我在 VAR 数据类型中拉取查询类型没有失败,但是我无法在屏幕上打印数据并将其分配给变量。 我想将结果传输到通用列表并将数据从 VAR 数据类型导出到变量。 我无法弄清楚我的问题,我正在等待您的帮助。

static void Main(string[] args)
{
    MTDoldur();

    DateTime xT = new DateTime();
    xT = new DateTime(2003, 12, 21);

    var sonuc = (from m in MarketTime 
                 where xT >= m.UTCBas && xT <= m.UTCSon
                 select new { m.Fark, m.Sezon }).ToList(); 
}

【问题讨论】:

  • new { m.Fark, m.Sezon } 创建了一个匿名类型,我认为这不是您想要的。我想你想创建一个SonucTime 的实例。那将是new SonucTime(m.Fark, m.Sezon)。匿名类型就像我们不能传递的临时类型,这就是为什么你不能将结果传递给另一个方法。如果您的查询选择new SonucTime,则结果为IEnumerable&lt;SonucTime&gt;,然后如果您添加ToList(),您将获得List&lt;SonucTime&gt;
  • @ScottHannen 感谢您的评论。你能给我举个例子吗?

标签: c# linq generic-list


【解决方案1】:

您在 UTCTime-constructor 中犯了“复制过去”错误 - UTCSon 未初始化。

需要修复构造函数:

public UTCTime(string UTCStart , string UTCStop , string Fark , char Sezon)
{
    this.UTCBas = Convert.ToDateTime(UTCStart);
    this.UTCSon = Convert.ToDateTime(UTCStop); // <----
    this.Fark = TimeSpan.Parse(Fark);
    this.Sezon = Sezon;
}

并请求数据:

var sonuc = (from m in MarketTime 
            where xT >= m.UTCBas && xT <= m.UTCSon
            select new SonucTime(m.Fark, m.Sezon))
            .ToList();
/*
result:
sonuc
Count = 1
[0] [SonucTime]:{Fark : 02:00:00   Sezon : K}
Fark [TimeSpan]:{02:00:00}
Sezon [char]:75 'K'
*/

【讨论】:

  • 非常感谢您提供我的解决方案。直接使用它可以提供更好的性能?或者将结果发送到通用列表而不是 VAR 类型更有效。记录数将产生数十亿次查询。
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多