对于实体:
[Table("CAD_ESCOLAS")]
public class Escola
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ESCOLA_ID { get; set; }
[StringLength(120), Required]
[MinLength(8)]
public string ESCOLA_NOME { get; set; }
[NotMapped]
public String ENDESC_ENDERECO { get; set; }
}
[Table("CAD_ENDERECO_ESCOLA")]
public class EnderecoEscola
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ENDESC_ID { get; set; }
[Required]
public int ESCOLA_ID { get; set; }
[Association("Escolas", "ESCOLA_ID", "ESCOLA_ID")]
[ForeignKey("ESCOLA_ID")]
public virtual Escola Escola { get; set; }
[StringLength(100), Required]
[MinLength(10)]
public string ENDESC_ENDERECO { get; set; }
}
从sql查询:
select esc.* , ende.ENDESC_ENDERECO
from CAD_ESCOLAS as esc left join CAD_ENDERECO_ESCOLA as ende
on esc.ESCOLA_ID = ende.ESCOLA_ID
where esc.ESCOLA_NOME like '%Escola%'
返回:
ESCOLA_ID ESCOLA_NOME ENDESC_ENDERECO
1 Escola 1 Rua 1
2 Escola 2 Rua 2
3 Escola 3 null
4 Escola 4 null
如何将sql查询转换为linq到相应的实体上面?
会是这样的,但是如何设置左连接?
public IQueryable<Escola> GetEscola()
{
using (SecurityCtx ctx = new SecurityCtx())
{
ctx.Configuration.LazyLoadingEnabled = true;
var query = ctx.Escola.Include("EnderecoEscola").Where( p => p.ESCOLA_NOME.Contains("Escola") . . . . . .
Select( esco => new Escola
{
ESCOLA_ID = esco.ESCOLA_ID,
ESCOLA_NOME = esco.ESCOLA_NOME,
ENDESC_ENDERECO = esco.ENDESC_ENDERECO,
)).AsQueryable();
return query;
}
}
请非常欢迎任何建议。
答案 0 :(得分:0)
虽然我不明白为什么你没有在EnderecoEscola
类中定义Escola
导航属性(反之亦然),但这里是查询:
from es in Escolas
join en in enderecoEscolas
on es.ESCOLA_ID equals en.ESCOLA_ID into JoinedEsEn
from en in JoinedEsEn.DefaultIfEmpty()
select new Escola()
{
ESCOLA_NOME = es.ESCOLA_NOME,
ESCOLA_ID = es.ESCOLA_ID,
ENDESC_ENDERECO = en != null ? en.ENDESC_ENDERECO : null
};
哪个会转换为lambda,如下所示:
Escolas.GroupJoin(enderecoEscolas, es => es.ESCOLA_ID, en => en.ESCOLA_ID,
(es, JoinedEsEn) => new {es, JoinedEsEn}).SelectMany(g => g.JoinedEsEn.DefaultIfEmpty(), (g, en) => new Escola()
{
ESCOLA_NOME =
g.es.ESCOLA_NOME,
ESCOLA_ID =
g.es.ESCOLA_ID,
ENDESC_ENDERECO =
en != null? en.ENDESC_ENDERECO: null
});