我正在尝试使用与子表连接的父表中的数据填充MVC应用程序中的ViewModel。我想从子表中获得的唯一数据是来自前三个记录的Nomenclature字段的逗号稀释字符串,并将它们放入ViewModel中的字符串字段中。这是我尝试过的没有成功的事情:
public IEnumerable<ReqHeaderVM> GetOpenReqs(string siteCode)
{
var openReqs = from h in context.ReqHeaders
join l in context.ReqLineItems on h.ID equals l.ReqID into reqLineItems
select new ReqHeaderVM
{
ReqID = h.ID,
ShopCode = h.ShopCode
Nomenclatures = reqLineItems.Select(x => x.Nomenclature).Take(3) // This doesn't work
};
return (openReqs.ToList());
}
这是ViewMdel:
public class ReqHeaderVM
{
[Editable(false)]
public string ReqID { get; set; }
public string ShopCode { get; set; }
public string Nomenclatures {get; set;}
}
答案 0 :(得分:1)
假设你在ReqHeaders和ReqLineItems之间有正确的关系(外键),这应该会给你你想要的东西......
public IEnumerable<ReqHeaderVM> GetOpenReqs(string siteCode)
{
var openReqs = from h in context.ReqHeaders
select new
{
ReqID = h.ID,
ShopCode = h.ShopCode
Nomenclatures = h.ReqLineItems
.OrderBy(x => x.SomeColumn)
.Select(x => x.Nomenclature)
.Take(3)
};
var openReqsTran = from oreq in openReqs.AsEnumerable()
select new ReqHeaderVM
{
oreq.ReqID,
oreq.ShopCode,
Nomenclatures = string.Join(", ", oreq.Nomenclatures)
};
return (openReqsTran);
}
请注意,Nomenclatures是一个命名类型列表。
答案 1 :(得分:0)
是的,连接会创建一个笛卡尔结果集。 (想想表格数据)你想要做什么。要获得您想要的结果,您可以做出一些选择。