我是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部分中给出每个属性并最终映射各个属性?
答案 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的东西。