2010-02-24 56 views
0

两个表(MainTable和EventType)。 EventType在代码中表示为枚举,并在数据库中被外键控制,使其看起来像;使用Entity Framework如何使用多个枚举值通过外键过滤?

Public enum EventTypeId As Integer 
    Blah = 1 
    Blurgh = 2 
    Whoo = 3 
End Enum 

我可以运行以下查询罚款;

From M in dbx.MainTable Where M.EventType.EventTypeId = 1 

但我不能这样做(psuedo code);

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

我发现[一个类似的问题(http://stackoverflow.com/questions/328600/how-do-you-do-a的列表的一部分-sql-style-in-statement-in-linq-to-entities-entity-framework-i)关于LINQ中的IN语句。 – p2u 2010-02-24 13:01:52

回答

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列表与特定事件类型的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) 
1

从未尝试过类似的东西,但你有没有测试,如果它的工作原理是您铸造枚举为整数,如下面的?

(int)EventTypeID.Blah 

对不起,如果不尝试自己,不能帮上太多忙,现在什么是不可能的。

+0

不好,它也讨厌它,因为它试图做数据库方面并抱怨说它不知道类型。 – 2010-02-24 14:27:50