左连接linq查询给出错误

时间:2014-05-27 07:02:55

标签: c# sql database linq

我有简单的sql左连接查询:

select a.firstName+' '+a.lastName Name from account a left join
EH_PP_TeacherEvaluations b
on a.id=b.EH_PP_TE_TeacherAcctID

我想在linq中做到这一点。

我试着这样做:

 List<Entity.TeacherEval> list = new List<Entity.TeacherEval>();
                list = (from a in context.accounts  join b in context.EH_PP_TeacherEvaluations on
                        a equals b.EH_PP_TE_TeacherAcctID into te
                        from b in te.DefaultIfEmpty()
                        select new { a.firstName+' '+a.lastName}
                        ).ToList();
                return list;

但它不起作用。

'join'出错:

Type interface failed in call to Group join.

和行:

 select new { a.firstName+' '+a.lastName}

请帮帮我。

我犯错误的地方,我是linq的新手。

修改1:

  public class TeacherEval
    {
        public Guid ID { get; set; }
        public DateTime? ProcessStartDate { get; set; }
        public DateTime? ProcessEndDate { get; set; }
        public Guid? AccountID { get; set; }
        public Guid? StatusId { get; set; }

        public TeacherEval() { }

        public TeacherEval(DB.EH_PP_TeacherEvaluation item)
        {
            this.ID = item.EH_PP_TE_TeacherEvalID;
            this.ProcessStartDate = item.EH_PP_TE_TeacherEvalProcessStartDate;
            this.ProcessEndDate = item.EH_PP_TE_TeacherEvalProcessEndDate;
            this.AccountID = item.EH_PP_TE_TeacherAcctID;
            this.StatusId = item.EH_PP_TESRT_TeacherEvalStatusIDEH;
        }

        public DB.EH_PP_TeacherEvaluation ToDB()
        {
            var rec = new DB.EH_PP_TeacherEvaluation();
            rec.EH_PP_TE_TeacherEvalProcessStartDate = this.ProcessStartDate;
            rec.EH_PP_TE_TeacherEvalProcessEndDate = this.ProcessEndDate;
            rec.EH_PP_TE_TeacherAcctID = this.AccountID;
            rec.EH_PP_TESRT_TeacherEvalStatusIDEH = this.StatusId;
            return rec;
        }

        public DB.EH_PP_TeacherEvaluation ToDB(DB.EH_PP_TeacherEvaluation rec)
        {
            rec.EH_PP_TE_TeacherEvalProcessStartDate = this.ProcessStartDate;
            rec.EH_PP_TE_TeacherEvalProcessEndDate = this.ProcessEndDate;
            rec.EH_PP_TE_TeacherAcctID = this.AccountID;
            rec.EH_PP_TESRT_TeacherEvalStatusIDEH = this.StatusId;
            return rec;
        }
    }

3 个答案:

答案 0 :(得分:2)

试试这个:

var result= (
        from a in context.accounts
        from b in context.EH_PP_TeacherEvaluations
            .Where(w=>w.EH_PP_TE_TeacherAcctID == a.id).DefaultIfEmpty()
        select new {name= a.firstName+" "+a.lastName}
    ).ToList();

这将转换为LEFT JOIN

修改

在我看来,你想要填充一个新对象。我建议你做这样的事情:

public class ResultDTO
{
    public string Name { get; set; }
}

然后是这样的查询:

var result= (from a in context.accounts  
    join b in context.EH_PP_TeacherEvaluations on 
        a.id equals b.EH_PP_TE_TeacherAcctID 
        into te
        from b in te.DefaultIfEmpty()
    select new ResultDTO
    {
        Name= a.firstName+" "+a.lastName
    }
    ).ToList();

这将导致List<ResultDTO>

修改2

替代方案你也可以这样做。如果你只想要字符串:

var result= (from a in context.accounts  
        join b in context.EH_PP_TeacherEvaluations on 
            a.id equals b.EH_PP_TE_TeacherAcctID 
            into te
            from b in te.DefaultIfEmpty()
        select a.firstName+" "+a.lastName
        ).ToList();

这将导致List<string>

答案 1 :(得分:1)

这样做:

List<Entity.TeacherEval> list = (from a in context.accounts  
                                 join b in context.EH_PP_TeacherEvaluations 
                                 on a.id equals b.EH_PP_TE_TeacherAcctID into te
                                 from b in te.DefaultIfEmpty()
                                 select new Entity.TeacherEval 
                                 {Name = a.firstName+" "+a.lastName}).
                                 ToList<Entity.TeacherEval>();

您的课程应具有名称:

的属性
public class TeacherEval
{
public string Name {get;set;}
} 

答案 2 :(得分:1)

试试这个:

List<Entity.TeacherEval> list =  (from a in context.accounts join b in 
                    context.EH_PP_TeacherEvaluations on
                    a.id equals b.EH_PP_TE_TeacherAcctID into te
                    from b in te.DefaultIfEmpty()
                    select new Entity.TeacherEval { Name = a.firstName+' '+a.lastName}
                    ).ToList();

您需要在类 Entity.TeacherEval

中添加名为名称的属性

OR

你可以简单地将列表调成像这样的变量

var list = (from a in context.accounts join b in 
                    context.EH_PP_TeacherEvaluations on
                    a.id equals b.EH_PP_TE_TeacherAcctID into te
                    from b in te.DefaultIfEmpty()
                    select new { Name = a.firstName+' '+a.lastName}
                    ).ToList();