【问题标题】:Cannot initialize TimeSpan with a collection initializer in linq query ¿Syntax error?无法在 linq 查询中使用集合初始化程序初始化 TimeSpan ¿语法错误?
【发布时间】:2015-03-21 11:25:45
【问题描述】:

我从 linq 查询到实体构建 ViewModel,然后执行以下 foreach:

_result.ForEach(t => t.horarioiniAFSP = (from U in model.AsistenciaCurso
                                          join T in model.Parametros
                                          on U.IdCurso equals T.ValorNumerico
                                          where U.UserId.Equals(t.UserId)
                                          && T.NombreParametro == "Modulo1"
                                          select new TimeSpan
                                          {
                                          U.HorarioInicio
                                          }).ToList());

但是我无法摆脱错误:“无法使用集合初始化器初始化 System.TimeSpan,因为它没有实现 IEnumerable。

怎么了?我怀疑这是语法问题,但我无法弄清楚,以前我是这样做的:

_result.ForEach(t => t.horariofinAFSP = model.AsistenciaCurso.Where(u => u.UserId.Equals(t.UserId)).Select(x => x.HorarioFin).ToList());

这没关系,因为我使用的是 linq Select,但后来我尝试使用 lambda 进行连接,如下所示:

_result.ForEach(t => t.horarioiniAFSP.AddRange(model.AsistenciaCurso.Where(u => u.UserId.Equals(t.UserId)).Join(model.Parametros, id => id.IdCurso, num => num.ValorNumerico, (id, num) => new TimeSpan { id.HorarioInicio })));

但这会触发相同的错误,即无法使用集合进行初始化。我真的没有时间在谷歌上搜索太多,所以这就是我问这个问题的原因。任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • HorarioInicio的类型是什么?
  • 另外,我真的没有时间去谷歌搜索这个问题不是问堆栈溢出问题的好理由......
  • 在 SQL server HorarioInicio 中是 Time(0) 而在 C# 中是 TimeSpan
  • select u.HorarioInicio 应该可以解决问题。
  • 是的,谢谢,就像我说的那样,我怀疑这是语法问题,因为根据我的阅读,当您初始化一个类而没有明确声明它的属性时似乎会出现错误,所以这次没有要申报的财产,对吧?

标签: c# linq


【解决方案1】:

(我知道解决方案已经找到;发布答案,因为没有其他人愿意这样做)

正如错误所说,您无法使用集合初始化程序初始化 TimeSpan。

TimeSpan 有four different constructors,您可以在创建新时选择它,但如果您已经有时间跨度,那么就使用它:

from U in model.AsistenciaCurso
join T in model.Parametros
on U.IdCurso equals T.ValorNumerico
where U.UserId.Equals(t.UserId)
&& T.NombreParametro == "Modulo1"
select U.HorarioInicio

【讨论】:

  • 这就是我所做的,我希望您不要将其标记为答案。我会做的,但感谢 MarcinJuraszek 这么快的回复(开个玩笑)
  • @gerardoflores 你可以随心所欲。 :) 很简单,如果没有人 回答这个问题,那么人们会继续来这里,因为他们认为它没有解决。如果 Marcin 回来并添加答案,我鼓励您接受它,但我认为在这一点上,他不太可能这样做。 :)
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多