0

我正在尝试使用来自与子表连接的父表的数据填充 MVC 应用程序中的 ViewModel。我想从子表中获取的唯一数据是前三个记录的命名字段中的逗号分隔字符串,并将它们放入 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;}


}
4

2 回答 2

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);
}     

请注意,命名法是命名法类型的列表。

于 2012-12-04T20:35:24.290 回答
0

是的,连接创建了一个笛卡尔结果集。(想想表格数据)你正在尝试做什么。要获得您想要的结果,您有几个选择。

  1. 使用延迟加载并遍历每个标题,分别查询行项目。
    1. 亲 - 简单的查询
    2. con - 选择 n+1
  2. 查询所有标题和所有行项目,但仅使用前 3 个构建视图模型
    1. 亲单查询
    2. con - 大笛卡尔结果集查询太多数据
  3. 查询所有标题和所有相关行个人
    1. pro - 2 个更小、更简单的查询
    2. con - 查询太多行详细信息。
  4. 在 2 个查询中查询所有标题和每个标题的前 3 行
    1. pro - 只获取您需要的信息
    2. con - 每个标题前 3 行的复杂查询。
于 2012-12-04T20:34:34.870 回答