Visual Studio立即窗口“表达式计算器中的内部错误”

时间:2016-03-17 09:26:45

标签: c# entity-framework visual-studio visual-studio-2015

免责声明:我已经检查了this question,但这是关于立即窗口的。

我正在使用Entity Framework来获取一些结果,所以我有一个日志记录列表:

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();中,在即时窗口中不起作用。

2 个答案:

答案 0 :(得分:2)

我认为这是表达式评估程序中的一个错误,因为它似乎适用于这样的解决方法:

tests.Select(t => t.Enum).ToList().Distinct().ToList()

使用此结果的结果相同:

? tests.Select(t => t.Enum).ToList().Distinct().ToList()
Count = 2
    [0]: Value1
    [1]: Value2

我注意到代码中的表达式'quickwatching'也会导致错误:

Internal error in the expression evaluator.

至少在该领域是一致的: - )

答案 1 :(得分:1)

你的表达不起作用:

tests.Select(t => t.Enum).Distinct().ToList();
'Internal error in the expression evaluator.'

但那是因为Enum是一个可以为空的类型。

tests.Select(t => t.Enum.Value).Distinct().ToList();
    'Count = 2
        [0]: Value1
        [1]: Value2'

事实上,EF中使用的本机函数不能在即时窗口中使用lambda表达式。