两个表(MainTable和EventType)。 EventType在代码中表示为枚举,并且在数据库中是外键,因此它看起来像;
Public enum EventTypeId As Integer
Blah = 1
Blurgh = 2
Whoo = 3
End Enum
我可以正常运行以下查询;
From M in dbx.MainTable Where M.EventType.EventTypeId = 1
但我不能这样做(伪代码);
From M in dbx.MainTable Where M.EventType.EventTypeId.Contains(EventTypeId.Blah,EventTypeId.Whoo)
第二种方法在链接到枚举时更具可读性和可维护性,但我在EF中找不到允许我这样做的构造。
这是EF的当前版本,而不是.Net 4.0。
总之,我想在SQL中做的很简单,它只需要在EF中;
Select * From MainTable Where EventTypeId In (1,3);
答案 0 :(得分:1)
从未尝试类似的东西,但是如果通过将枚举转换为整数来测试它是否有效,如下所示?
(int)EventTypeID.Blah
对不起,如果不为自己尝试,不能没有更多的帮助,现在还不可能。
答案 1 :(得分:1)
如果你看看你想要什么:
总之,我想在SQL中做的很简单,只需要进入 EF;
Select * From MainTable Where EventTypeId In (1,3);
你应该解释为:EventTypeId 应该是(1,3)的一部分。 相当于:(1,3)包含EventTypeId
你在尝试的是:
但是我不能这样做(伪代码)
From M in dbx.MainTable Where M.EventType.EventTypeId.Contains(EventTypeId.Blah,EventTypeId.Whoo)
但是你正在尝试:EventTypeId 包含(1,3)
解决方案是在包含语法的SQL中实际需要的内容,但转过来:你应该寻找(1,3)包含EventTypeId
因此,请创建一个int列表,其中包含您要查找的特定EventType ID。 然后过滤所有记录,其中EventTypeId是id'
列表的一部分List<int> eventTypeIds = new List<int>();
eventTypeIds.Add((int)EventTypeId.Blah);
eventTypeIds.Add((int)EventTypeId.Whoo);
From M in dbx.MainTable Where eventTypeIds.Contains(M.EventTypeId)