使用LINQ进行多数据查询

时间:2018-02-28 15:55:37

标签: c# entity-framework linq

我有一个函数从我的数据库中获取数据并加入它。我想从不同的表中获取数据,我该如何实现?我想从“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;
    }

这就是我的数据库的样子:

database

2 个答案:

答案 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()进行过滤。