【发布时间】:2017-05-28 12:35:26
【问题描述】:
ASP NET MVC5 Web 应用程序,E.F.6,Visual Studio 2015
CategoryTrans 模型类是 Category 模型类中的一个虚拟 ICollection。
类别模型类是产品模型类中的一个虚拟属性。
public partial class Product
{
public int? ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Category Category { get; set; }
}
public partial class Category
{
public int ID { get; set; }
public string Name { get; set; }
public int? ParentID { get; set; }
public bool IsDeleted { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<CategoryTrans> CategoryTrans { get; set; }
}
public class CategoryTrans
{
[Key, Column(Order = 1)]
public int category_id { get; set; }
[Key, Column(Order = 2)]
public int language_id { get; set; }
[ForeignKey("category_id")]
public virtual Category categoryId { get; set; }
[ForeignKey("language_id")]
public virtual ISO_Languages languageId { get; set; }
public string name { get; set; }
}
CategoryTrans 有一个由 Category 和 ISO_languages FK 制作的复合 PK。在查询表格并用产品和相关类别翻译填充 productviewmodel 时,我得到所有类别的翻译(一个“category_id”以及 Product.Category.CategoryTrans 集合中的所有“language_id”。
我需要做的是根据用户文化输入参数过滤单个翻译(CategoryTrans.name)。
我认为可以通过将 ViewModel 属性设置为:
public CategoryTrans CategoryTrans
{
get
{
HttpUtilities HttpHelper = new HttpUtilities();
string culture = HttpHelper.getShortCulture();
var CT = Product.Category.CategoryTrans.Select(x => new CategoryTrans
{
name = x.name
})
.Where(b => b.language_id.Equals(culture)).FirstOrDefault();
return CT;
}
而且,在视图中:
@Html.DisplayFor(modelItem => item.CategoryTrans.name)
但它一直返回空值,而我可以看到 CategoryTrans ICollection 已正确填充。 我是在尝试做一些不可能的事情,还是只是语法错误?
【问题讨论】:
-
你的
language_id是整数吧? -
您是否首先验证了
b.language_id.Equals(culture)这种情况是否有效?
标签: c# asp.net-mvc linq