【问题标题】:An expression tree may not contain a dynamic operation - linq表达式树可能不包含动态操作 - linq
【发布时间】:2017-01-30 17:09:44
【问题描述】:

我有一个简单的查询,

            var RoundList = (from t1 in entities.RPlays.AsNoTracking()
                             where t1.Start.ToString("d") == "01/03/2017" && t1.VId == 32
                             select new
                             {
                                 TimePlayed = t1.TimePlayed,
                                 MatchPlayed = t1.MatchPlayed 
                             });

这让我得到消息“表达式树可能不包含动态操作”,但它没有说明位置:(

我在where 线路上遇到了问题。

我做错了什么?

【问题讨论】:

  • 您是否检查了许多其他问题中的任何一个与完全相同的问题?
  • 我猜是ToString。为什么不与DateTime 比较,或者只是分别比较月、日和年部分。
  • 也许将您的“01/03/2017”转换为日期时间变量并使用类型比较而不是字符串转换。
  • @tnw 我已经检查了其他许多具有完全相同问题的问题
  • 如果你从代码中取出部分查询,我相信它会让你知道问题出在哪里,但它可能是像 @juharr 所说的 ToString("d") 。

标签: c# linq


【解决方案1】:

这是由于ToString("d")

您应该尝试像这样比较日期:

        DateTime myDate = DateTime.Parse("2017-03-01");
        var RoundList = (from t1 in entities.RPlays.AsNoTracking()
                         where t1.Start == myDate && t1.VId == 32
                         select new
                         {
                             TimePlayed = t1.TimePlayed,
                             MatchPlayed = t1.MatchPlayed 
                         });

【讨论】:

  • 实际上可能需要做t1.Start.Date == myDate以便截断时间,或者分别比较DateTime部分。
  • 确实如此!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2013-07-27
  • 2011-10-30
  • 2012-05-05
  • 2012-09-07
  • 2011-05-08
相关资源
最近更新 更多