我需要EF中Linq的一些幫助。我有一個名爲「CustomerKind」的EKind類的客戶表,它是一種Enum類型(Kind1,Kind2,Kind3)。在EF Linq中切換
我也有額外的表,可以說「Kind1Details」,「Kind2Details」和「Kind3Details」。每個細節表都包含一個特殊的名稱(列名稱)。
現在我想用EF Linq語句來繪製信息。如果CustomerKind是Kind1,我需要表Kind1Details的名稱,如果它是Kind2Details的Kind2和Kind3Details的Kind3。所以實際上我需要在select new子句中進行切換。像這樣:
var customerList=from customer in context.Customer
select new
{
Id=customer.Id,
Kind=customer.CustomerKind,
if(Kind==EKind.Kind1)
Name=customer.Kind1.Name
if (Kind == EKind.Kind2)
Name = customer.Kind2.Name
if (Kind == EKind.Kind3)
Name = customer.Kind3.Name
}
我可以加載所有數據並在查詢後再次遍歷它,但也許有更好的方法。
最後我明白了,謝謝你們。這是我工作的解決方案:
var customerList = from customer in context.Customer
select new
{
Id = customer.Id,
Kind = customer.CustomerKind,
Name1 = (Kind == EKind.Kind1) ? customer.Kind1.Name : null,
Name2 = (Kind == EKind.Kind2) ? customer.Kind2.Name : null,
Name3 = (Kind == EKind.Kind3) ? customer.Kind3.Name : null,
Age1 = (Kind == EKind.Kind1) ? customer.Kind1.Age : 0,
Age2 = (Kind == EKind.Kind2) ? customer.Kind2.Age : 0,
Age3 = (Kind == EKind.Kind3) ? customer.Kind3.Age : 0,
};
return customerList.Select(r => new CustomerOV
{
Age = r.Age1 + r.Age2 + r.Age3,
Name = r.Name1 ?? r.Name2 ?? r.Name3,
}).ToList();
尼科
我相信你正在尋找的字[鑑別](http://stackoverflow.com/questions/24333297/entity-framework-do-case-on-discriminator) – CodingYoshi
有沒有聽說過[? :條件運算符](https://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –
請不要用您的答案編輯您的問題。如果您的解決方案與提供的答案之一明顯不同,請提交您自己的答案並接受答案。但是,如果提供的答案之一有效,請接受。無論如何,不要在你的問題中提出答案。 – krillgar