回答這個問題,就產生了這個其他問題:How to use LINQ expressions as static members of classes in queries when the class is related multiple times to a second class凝聚領域沒有得到「只有初始化,實體成員和實體導航屬性都支持」從LINQ
我有一個現有的ASP.net MVC 4網站,我需要修改。
本網站內的核心實體是待售物品,由幾家不同的公司創建並分爲幾類。我的任務是讓每個公司有自己的可選別名用於全局類別。獲取在數據庫和模型中設置的兩個類別是沒有問題的,這使得應用程序在存在時使用新的可選別名,並且默認爲全局,否則就是我努力尋找最佳方法的地方。
向每個LINQ查詢添加一個coalesce語句顯然是可行的,但有幾十個位置需要存在這種邏輯,最好是在不可避免的更改發生時將此邏輯保存在一個位置。
下面的代碼是我試圖存儲在模型中聚結,而這會導致「只有初始化,實體成員和實體導航屬性都支持。」執行LINQ查詢時拋出的錯誤。我不確定如何使用LINQ友好的另一種方法實現類似的功能。
型號:
public class Item
{
[StringLength(10)]
[Key]
public String ItemId { get; set; }
public String CompanyId { get; set; }
public Int32 CategoryId { get; set; }
[ForeignKey("CategoryId")]
public virtual GlobalCategory GlobalCategory { get; set; }
[ForeignKey("CompanyId, CategoryId")]
public virtual CompanyCategory CompanyCategory { get; set; }
public String PreferredCategoryName
{
get{
return (CompanyCategory.CategoryAlias == null || CompanyCategory.CategoryAlias == "") ? GlobalCategory.CategoryName : CompanyCategory.CategoryAlias;
}
}
}
控制器LINQ的例子:
var categories = (from i in db.Items
where i.CompanyId == siteCompanyId
orderby i.PreferredCategoryName
select i.PreferredCategoryName).Distinct();
var itemsInCategory = (from i in db.Items
where i.CompanyId == siteCompanyId
&& i.PreferredCategoryName == categoryName
select i);
我已經搞砸了這種方法,但無法弄清楚如何使它與查詢風格的LINQ語句一起工作,使用對象樣式的LINQ語句在你的例子中是缺少的一塊。謝謝。 – kscott