加入LINQ以选择列表中的子列表

时间:2013-11-20 03:30:16

标签: asp.net-mvc-3 linq join linq-to-entities entity-framework-5

我有两个课程如下:

public class HRM_SERVICE_PERD_BNFT_DTLModel
{
    public string SRVC_PERD_BNFT_CODE { get; set; }

    public string RTR_BNFT_CODE { get; set; }

    public string RTR_BNFT_NAME { get; set; }

    public string RTR_BNFT_CALC_MODE { get; set; }

    public string SAL_HEAD_CODE { get; set; }

    public string SAL_HEAD_NAME { get; set; }

    public string RTR_BNFT_IN_PERCENT { get; set; }

    public string RTR_BNFT_AMOUNT { get; set; }

    public string RTR_BNFT_INACTV_DATE { get; set; }

    public short? RTR_BNFT_SLNO { get; set; }
}



public class HRM_RETIREMENT_BENEFITModel : BaseModel
{
    public string RTR_BNFT_CODE { get; set; }

    public string RTR_BNFT_NAME { get; set; }

    public string RTR_BNFT_SRTNM { get; set; }

    public string RTR_BNFT_REM { get; set; }

    public short? RTR_BNFT_SLNO { get; set; }


}

现在我想从第一个模型中选择特定'SRVC_PERD_BNFT_CODE'的数据,然后我需要从第二个表中选择'RTR_BNFT_NAME'以获取所有过滤数据以及第一个模型中的其他值。我正在尝试加入,但没有得到名字。它显示的是system.collection.string而不是value。

这是我到目前为止所做的:

public List<HRM_SERVICE_PERD_BNFT_DTLModel> GetBenefitData(string mstcode)
    {
        var model2 = DataContext.HRM_SERVICE_PERD_BNFT_DTL.AsEnumerable().Where(m => m.SRVC_PERD_BNFT_CODE == mstcode).Select(s=>s).ToList();

        var model = DataContext.HRM_SERVICE_PERD_BNFT_DTL.AsEnumerable().Where(m => m.SRVC_PERD_BNFT_CODE == mstcode)
            .Select(s => new HRM_SERVICE_PERD_BNFT_DTLModel
            {
                RTR_BNFT_CODE = s.RTR_BNFT_CODE,
                RTR_BNFT_SLNO = s.RTR_BNFT_SLNO,
                RTR_BNFT_CALC_MODE = s.RTR_BNFT_CALC_MODE,
                RTR_BNFT_AMOUNT = (s.RTR_BNFT_AMOUNT).ToString(),
                RTR_BNFT_NAME = (from x in model2
                                 join c in DataContext.HRM_RETIREMENT_BENEFIT on      x.RTR_BNFT_CODE equals c.RTR_BNFT_CODE into p
                                 from b in p.AsEnumerable()
                                 select b.RTR_BNFT_NAME).ToList().ToString(),

                RTR_BNFT_IN_PERCENT = (s.RTR_BNFT_IN_PERCENT).ToString()
            }).ToList(); 


        return model;
    }

我做错了什么?请帮忙。

1 个答案:

答案 0 :(得分:1)

以下是可疑的。

.ToList().ToString()

删除ToString部分并将其替换为FirstorDefault之类的部分,然后它应该可以正常工作。

获取System.Collection.String之类的原因是List<T>.ToString()通常是typename,直到以某种方式覆盖它。

遵循最小剪切产品System.Collections.Generic.List 1 [System.String]`

 List<String> list = new List<String>();
var str = list.ToString();
Console.WriteLine(str); //System.Collections.Generic.List`1 [ System.String ]