如何使用LINQ处理嵌套实体?

时间:2013-11-21 09:29:33

标签: linq select nested

我现在有一个名为Basdiseasecure的实体,其中包含ComdrugList:

public class Basdiseasecure
{
    public Guid               Disease_cure_id { get; set; }    //pk
    public Guid?              Eartag_id       { get; set; }   
    public DateTime?          Cure_time       { get; set; } 
    public string             Cure_method     { get; set; }
    public string             Cure_result     { get; set; }
    public string             Combdrug_idlist { get; set; }

    public List<Bascombdrug> ComdrugList { get; set; } 
}

Bascombdrug实体列出如下:

public class Bascombdrug
{
    public Guid      Combdrugid   { get; set; } //pk
    public string    Combdrugname { get; set; }  
    public string    Combdrugnote { get; set; }  
    public DateTime  Updatetime   { get; set; }  
}

在实体Basdiseasecure中,Combdrug_idlist存储Combdrugid并用逗号分开它们(如F47EF316-2308-4673-AFA4-D5FA81E520D8,F47EF316-2308-4673-AFA4-D5FA81E52000)。下面是我用来通过Disease_cure_id获取Basdiseasecure实体的代码:

[WebMethod]
public List<Basdiseasecure> GetDiseaseCureInfo(Guid id)
{
      IQueryable<Basdiseasecure> getDiseaseCure;
      using (GDeerGardenEntities entities = new GDeerGardenEntities())
      {
              getDiseaseCure = from p in entities.bus_disease_cure
                               select new Basdiseasecure()
                               {
                                   Disease_cure_id = p.disease_cure_id,
                                   Eartag_id = p.eartag_id,
                                   Cure_time = p.cure_time,
                                   Cure_method = p.cure_method,
                                   Cure_result = p.cure_result,
                                   Combdrug_idlist = p.combdrug_idlist
                                   //How can I build ComdrugList here ?
                               };
          return getDiseaseCure.ToList();
     }
}

我不知道如何根据Combdrug_idlist字段构建我的Bascombdrug列表。 有什么好办法吗? THX。

修改

我在这里得到了一个方法:

首先返回没有ComdrugList的列表。

第二次循环Combdrug_idlist字段并获取ID

第三,使用linq逐个使用id提取相关信息,并将它们组成列出的实体。

以上是我目前使用的方法,我需要为这种情况编写很多代码。这就是我问这个问题的原因。

1 个答案:

答案 0 :(得分:1)

试试这个(假设entities.bus_comb_drug是用于创建Bascombdrug实体的源集合):

getDiseaseCure =
    from p in entities.bus_disease_cure
    select new Basdiseasecure()
    {
        // other properties
        ComdrugList =
        (from d in entities.bus_comb_drug
            join ids in p.combdrug_idlist.Split(',') on
                d.combdrugid.ToString().ToLower() equals ids.ToLower()
            select new Bascombdrug()
            {
                Combdrugid = d.combdrugid
                // other properties
            }).ToList()
    };