【问题标题】:Using Entity Framework how do I filter by a foreign key using multiple enumeration values?使用实体框架如何使用多个枚举值按外键过滤?
【发布时间】:2010-02-24 12:56:48
【问题描述】:

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

【问题讨论】:

标签: .net entity-framework foreign-keys


【解决方案1】:

如果你看你想要什么:

总之,我想用 SQL 做的很简单,只需要在 英孚;

Select * From MainTable Where EventTypeId In (1,3);

您应该将其解释为:EventTypeId 应该是 (1,3) 的一部分。 等效于:(1,3) contains EventTypeId

你正在尝试的是:

但我不能这样做(伪代码)

From M in dbx.MainTable Where M.EventType.EventTypeId.Contains(EventTypeId.Blah,EventTypeId.Whoo)

但是你正在尝试:EventTypeId 包含 (1,3)

解决方案是在包含语法的 SQL 中做你真正想要的,但反过来:你应该寻找 (1,3) contains EventTypeId

因此,使用您正在寻找的特定 EventType id 创建一个 int 列表。 然后过滤所有 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)

【讨论】:

    【解决方案2】:

    从未尝试过类似的方法,但您是否通过将枚举转换为整数来测试它是否有效,如下所示?

    (int)EventTypeID.Blah
    

    对不起,如果不亲自尝试,就帮不上什么忙了,现在是不可能的。

    【讨论】:

    • 不,它也讨厌这样,因为它试图在 db 端执行它并抱怨它不知道类型。
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多