Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中使用linq查询执行连接_C#_Entity Framework_Linq - Fatal编程技术网

C# 在实体框架中使用linq查询执行连接

C# 在实体框架中使用linq查询执行连接,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图在linq查询中使用联接从数据库中的表中选择一些数据,但似乎无法掌握如何将其保存到要返回的DTO列表中。 我一直在看这篇文章,寻找使用lambda表达式的方法:但似乎那个家伙正试图完成一些与我略有不同的事情;我想比较值CPR(来自表Coworkers)和值CPR(来自表职责),并选择Projektname(来自表职责)等于字符串Projektname的所有值 到目前为止,我所写的方法是: public List<CoworkerDTO> GetCoworkers(str

我试图在linq查询中使用联接从数据库中的表中选择一些数据,但似乎无法掌握如何将其保存到要返回的DTO列表中。 我一直在看这篇文章,寻找使用lambda表达式的方法:但似乎那个家伙正试图完成一些与我略有不同的事情;我想比较值CPR(来自表Coworkers)和值CPR(来自表职责),并选择Projektname(来自表职责)等于字符串Projektname的所有值

到目前为止,我所写的方法是:

    public List<CoworkerDTO> GetCoworkers(string projektname)
    {
        _coworkerlist = new List<CoworkerDTO>();

        using (var context = new F17ST2ITS2201608275Entities())
        {
            var dataset =
                from co in context.Coworkers
                join du in context.Duties on co.CPR equals du.CPR
                where du.Projektname == projektname
                select new {Coworkers = co};

            foreach (var element in dataset.ToList())
            {
                _coworkerlist.Add(element);
            }
        }
        return _coworkerlist;
    }
表Coworkers有一列对应于上面的每个属性,所以我想我的问题是如何以某种方式将我得到的选择转换为coworkerdto列表。 对不起,这篇文章太长了,如果我的英语有点混乱,因为它不是我的第一语言。
提前感谢:)

您应该将
同事
实体转换为
同事
实体。您可以手动执行此操作(假定属性具有相同的名称和类型):

或者,您可以使用AutoMapper之类的工具自动进行投影:

Mapper.Initialize(cfg => 
    cfg.CreateMap<Coworkers, CoWorkerDTO>());
Mapper.Initialize(cfg=>
CreateMap());
带投影的查询将如下所示

 var entities =
        from co in context.Coworkers
        join du in context.Duties on co.CPR equals du.CPR
        where du.Projektname == projektname
        select co;

 return entities.ProjectTo<CoWorkerDTO>().ToList();
var实体=
来自上下文中的同事
在上下文中加入du。co.CPR上的职责等于du.CPR
其中du.Projektname==Projektname
选择公司;
返回entities.ProjectTo().ToList();

非常感谢!这似乎是可行的,但我确实遇到了一些异常,告诉我我无法从“type System.Nullable”转换为目标类型“int”,但似乎我可以通过将“?”default(int)”添加到它给出该异常的位置来解决这一问题:)@sunero4这意味着数据库中有可为null的字段,而这些字段在dto中不可为null。如果满足您的需要,您可以使用默认值。因此,最好允许它们在DTO?@sunero4中为空,这将是一个完美的解决方案,因为具有
0
值与完全没有值并不相同。很好,我会这样做:)非常感谢您的帮助!
Mapper.Initialize(cfg => 
    cfg.CreateMap<Coworkers, CoWorkerDTO>());
 var entities =
        from co in context.Coworkers
        join du in context.Duties on co.CPR equals du.CPR
        where du.Projektname == projektname
        select co;

 return entities.ProjectTo<CoWorkerDTO>().ToList();