簡體   English   中英

LINQ查詢左聯接給出錯誤

[英]Left join on linq query giving error

我有簡單的SQL Left連接查詢為:

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;

但是它不起作用。

“加入”時出錯:

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;
        }
    }

嘗試這個:

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>

這樣做:

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>();

您的課程應具有Name屬性

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

嘗試這個:

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類中添加一個名為Name屬性。

要么

您可以簡單地將列表調用成這樣的變量

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM