我有一个函数从我的数据库中获取数据并加入它。我想从不同的表中获取数据,我该如何实现?我想从“motif_deplacement”表中选择“libelle_motif”
我现在的职能:
public static List<personne> getPersonne_Deplacement(int numDeplacement)
{
List<personne> desP = new List<personne>();
var query = (from Per in db.personne.ToList()
join Dep in db.deplacement_personne.ToList() on Per.num_personne equals Dep.num_personne
join Mot in db.motif_deplacement.ToList() on Dep.id_motif equals Mot.id_motif
where Dep.id_deplacement == numDeplacement
select new personne
{
nom_personne = Per.nom_personne,
num_personne = Per.num_personne,
ref_personne = Per.ref_personne,
libelle_motif = Mot.libelle_motif,
});
desP = query.ToList();
return desP;
}
这就是我的数据库的样子:
答案 0 :(得分:1)
您必须创建一个新类,它将充当具有所需属性的模型。根据所包含的关系构建select
中的一个。
如果您在EF实体中建立关系模型而不是在每个查询中写出连接语句,那么管理此查询也会容易得多。
另请注意,我删除了对ToList
的所有电话。您之前的代码实现了每个表中的所有实体,然后在内存中加入和过滤效率非常低。
public static List<SomeModel> getPersonne_Deplacement(int numDeplacement)
{
var query = from Per in db.personne
join Dep in db.deplacement_personne on Per.num_personne equals Dep.num_personne
join Mot in db.motif_deplacement on Dep.id_motif equals Mot.id_motif
where Dep.id_deplacement == numDeplacement
select new SomeModel
{
nom_personne = Per.nom_personne,
num_personne = Per.num_personne,
ref_personne = Per.ref_personne,
libelle_motif = Mot.libelle_motif,
};
return query.ToList();
}
SomeModel.cs
public class SomeModel
{
public string nom_personne {get;set;}
public string num_personne {get;set;}
public string ref_personne {get;set;}
public string libelle_motif {get;set;}
// add additional properties as needed
}
答案 1 :(得分:0)
我不知道我的回答是否与您的问题有关。但为什么不使用.Include()
例如:
var result = db.personne.Include(x => x.deplacement_personne).ThenInclude(x => x.motif_deplacement)
它会给你这个结构:
obj personne {nom_personne,..., obj deplacement_personne {...,obj motif_deplacement }
您还可以选择.Select()
的任何cols,或使用.Where()
进行过滤。