【发布时间】:2016-03-17 09:26:44
【问题描述】:
免责声明:我已经检查了this question,但这是关于即时窗口的。
我正在使用实体框架来获取一些结果,所以我有一个日志列表:
var result = ctx.Logging.Where(*filtering*).ToList();
但我想知道列表的不同数据类型(枚举、底层类型字节和Datatype 可以为空,如果我使它不可为空,它出于某种原因可以工作)。当我尝试在即时窗口中执行此操作时:
result.Select(r => r.Datatype).Distinct().ToList();
我收到消息:
表达式计算器中的内部错误。
但是,当我在代码中执行此操作时,它可以正常工作,例如var test = result.Select(r => r.Datatype).Distinct().ToList();。我已经尝试使用调试选项中的“托管兼容模式”和“旧表达式”,但随后我收到另一条消息:
表达式不能包含 lambda 表达式
我是否遗漏了什么或者这是 Visual Studio 2015 中的错误?
Minimal, Complete, and Verifiable example:
class Program
{
static void Main(string[] args)
{
List<Test> tests = new List<Test>();
for(int i = 0; i<100; i++)
{
if (i % 2 == 0)
tests.Add(new Test { ID = i, Enum = TestEnum.Value1 });
else
tests.Add(new Test { ID = i, Enum = TestEnum.Value2 });
}
var distinct = tests.Select(t => t.Enum).Distinct().ToList();
}
}
public enum TestEnum : byte
{
Value1 = 1,
Value2 = 2
}
public class Test
{
public int ID { get; set; }
public TestEnum? Enum { get; set; }
}
在代码tests.Select(t => t.Enum).Distinct().ToList(); 中有效,在即时窗口中无效。
【问题讨论】:
-
它should works。等待:注意:不支持需要运行本机函数的 Lambda 表达式(例如 LINQ-to-SQL)。这可能会使您的问题与 @987654324 重复@
-
@Thomas 当我打开旧模式时,我只会得到“不能包含表达式”。如果我关闭它,我会得到“无法评估表达式”。但是,如果我使枚举不可为空,它可以在即时窗口中工作。看到你的编辑:我打电话给
ToList所以我不再使用 Linq-to-entities 或 Linq-to-sql,而是 Linq-to-object。 -
那么我的咖啡时间。
标签: c# entity-framework visual-studio visual-studio-2015