【发布时间】:2012-12-01 01:29:25
【问题描述】:
这个问题的答案引发了另一个问题:How to use LINQ expressions as static members of classes in queries when the class is related multiple times to a second class
我有一个现有的 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 entity-framework asp.net-mvc-4