在同一型号中调用并返回两个List

时间:2013-08-30 06:33:09

标签: c# sql asp.net-mvc-4

您好我正在使用sql和c#在mvc4中完成我的项目。

我在数据库Mem_Basic中有两个表,Mem_Details

和两个有效的模型

 public class MemberBasicData
    {
        public int Id { get; set; }
        public string Mem_NA { get; set; }
        public string Mem_Occ { get; set; }
    }

 public class MemberDetail
    {
        public int Mem_Id { get; set; }
        public string Mem_Role { get; set; }
        public string Mem_Email { get; set; }
        public string Mem_MPh { get; set; }
        public DateTime Mem_DOB { get; set; }
        public string Mem_BGr { get; set; }
        public DateTime Mem_WAnn { get; set; }
        public string Mem_Spouse { get; set; }
        public string Mem_Web { get; set; }

    }

在我的模型中,我想从两个表中检索所有数据并返回单个列表。但我如何将这两种属性模型合二为一。类似的东西

   public List<MemberBasicData>,List<MemberDetail> GetMemberProfile()//I Know this is wrong
    {
         ............//dbcodes

      return list1,list2
    }

3 个答案:

答案 0 :(得分:2)

为什么不创建新类:

public class MyClass
{

    public List<MemberBasicData> MemberDataList {get;set;}
    public List<MemberDetail> MemberDetailList {get;set;}

}

如果你想合并它们,你可以加入它们:

var query = MemberBasicData
            .Join
            (
                MemberDetail,
                x=>x.Id,
                x=>x.Mem_Id,
                (b,d)=>new
                {
                    b.Id,
                    b.Mem_NA,
                    b.Mem_Occ,
                    d.Mem_Id ,
                    d.Mem_Role,
                    d.Mem_Email,
                    d.Mem_MPh ,
                    d.Mem_DOB ,
                    d.Mem_BGr ,
                    d.Mem_WAnn ,
                    d.Mem_Spouse, 
                    d.Mem_Web 
                }
             )
             .ToList()

答案 1 :(得分:1)

public class MemberData
{
    List<MemberBasicData> BasicData {get;set;}
    List<MemberDetail> Details {get;set;}
}

public MemberData GetMemberProfile()//I Know this is wrong
{
         ............//dbcodes

  return new MemberData(){BasicData=list1, Details=list2};
}

尝试将列表包装在另一个类中。这是同时返回两个列表的最佳形式,因为没有内置的可能性返回两个值。

之后,您可以访问自己的列表,例如memberData.DetailsmemberData.BasicData

答案 2 :(得分:1)

你可以像这样合并两个列表

var merged = (from m in members
    join mb in memberBasics
    on m.Mem_Id equals mb.Id // join on some property
    into grouping
    from mb in grouping.DefaultIfEmpty() // ensures default if no match
    select new { Mem_Id = m.Mem_Id }).ToList();

这将为您提供members中与memberBasics的匹配合并的所有项目,因为这些集合看起来像......

var members = new List<MemberDetail> {
    new MemberDetail {
        Mem_Id = 1
    },
    new MemberDetail {
        Mem_Id = 2
    }
};

var memberBasics = new List<MemberBasicData> {
    new MemberBasicData {
        Id = 1
    }
};

但是我应该问,你在进行2个DB查询吗?如果您可能那么可以考虑将其减少到一个并在数据库级别完成工作。