使用实体框架如何使用多个枚举值过滤外键?

时间:2010-02-24 12:56:49

标签: .net entity-framework foreign-keys

两个表(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);

2 个答案:

答案 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)