3
我有一些代碼基於切換傳遞給它的枚舉值,然後執行數據庫查詢(通過EF)的switch語句如何更換表情
switch(regtype)
{
case RegType.Type1:
return (Dc.ListPeople(n => n.RegistrationType1Id != null)
.DefaultIfEmpty()
.Max(n => n.RegistrationType1Id) ?? 0) + 1;
case RegType.Type2:
return (Dc.ListPeople(n => n.RegistrationType2Id != null)
.DefaultIfEmpty()
.Max(n => n.RegistrationType2Id) ?? 0) + 1;
...
}
現在的數據模型是它是什麼,讓我們看看過去。 RegistrationType_N_Id
是int?
,ListPeople
需要參數Expression<Func<Person, bool>>
。
總共有3個枚舉值,所以它不是,不好,但即使只是爲了心理練習,我想知道我是否可以用更花哨的東西來替換這個switch語句。
我想到了Dictionary<RegType, Expression<Func<something>>>
,但是由於db謂詞中的第一次使用不同於Max()
中的第二次使我陷入了困境。
這將引發 「:本LINQ表達式節點類型 '調用' 不LINQ支撐到實體NotSupportedException異常」。據我所知,EF需要一個'Expression'來創建適當的SQL查詢。 –
romeozor
@romeozor我錯過了EF部分。我在方法聲明中將'Func'改爲'Expression'。 –
Kapol
但現在代碼試圖調用一個表達式,這將不會編譯 – romeozor