LINQ查询:限制子实体

时间:2015-08-20 09:59:20

标签: c# linq

我是LINQ的新手,所以我需要一个初步的帮助来简化LINQ查询的编写。在我的场景中:我有两个表C_Systemtype,与CT_Systemtype的关系为1:M,使用数据库第一种方法。

C_System类:

{
    public string SystemtypeId { get; set; }
    public bool Is_productive { get; set; }
    public bool Is_systemown { get; set; }
    public bool Is_active { get; set; }
    public byte[] Icon { get; set; }

    public virtual ICollection<CT_Systemtype> CT_Systemtype { get; set; }
    public virtual ICollection<C_System> C_System { get; set; }
}

类CT_Systemtype:

{
    public string SystemtypeId { get; set; }
    public string LanguageId { get; set; }
    public string Title { get; set; }
    public string Descript { get; set; }    
    public virtual C_Systemtype C_Systemtype { get; set; }
    public virtual S_Language S_Language { get; set; }
}

我喜欢选择所有C_Systemtype,但CT_Systemtype仅限于给定的LanguageId。

我相信以下LINQ查询正在运行(p_langId是我的参数):

using (var db = new PaltrConnect())
        { var query = from s in db.C_Systemtype
                      join t in db.CT_Systemtype on s.SystemtypeId equals t.SystemtypeId
                      where t.LanguageId == p_langId 
                      select new { s.Is_productive,
                                   s.Is_systemown,
                                   s.Is_active,
                                   s.Icon,
                                   s.CT_Systemtype }
         }

结果是匿名类型。我的意图类似于C_Systemtype.Include(t =&gt; t.CT_Systemtype),但对CT_Systemtype有额外的限制。

如何以这样的方式重写此查询:我不必在select部分中给出每个属性并最终映射各个属性?

2 个答案:

答案 0 :(得分:1)

using (var db = new PaltrConnect())
{ 
var query = from s in db.C_Systemtype
                  join t in db.CT_Systemtype on s.SystemtypeId equals t.SystemtypeId
                  where t.LanguageId == p_langId 
                  select s ;/*s is your C_Systemtype*/
     }

答案 1 :(得分:0)

因为您要将两个表连接在一起,所以不能只返回一个类型。为了防止必须映射选择中的每个属性,您可以使用类似AutoMapper的东西。