这个问题的答案引发了另一个问题:当类与第二个类多次相关时,如何在查询中使用 LINQ 表达式作为类的静态成员
我有一个需要修改的现有 ASP.net MVC 4 站点。
本网站的核心实体是待售商品,由多家不同的公司创建并分为多个类别。我的任务是让每家公司都有自己的全局类别可选别名。在数据库和模型中设置这两个类别没有问题,使应用程序在存在时使用新的可选别名并默认为全局,否则我正在努力寻找最佳方法。
向每个 LINQ 查询添加一个合并语句显然会起作用,但是有几十个位置需要存在此逻辑,并且最好将此逻辑保留在一个位置以备不时之需。
以下代码是我尝试将合并存储在模型中,但这会导致“仅支持初始化程序、实体成员和实体导航属性。 ”执行 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);