簡體   English   中英

如何使用帶有Lambda表達式的實體框架在mysql查詢下編寫代碼?

[英]How to write below mysql query using Entity Framework with Lambda expression?

SELECT
`Distinct1`.`UserId`, 
`Distinct1`.`FirstName`, 
`Distinct1`.`LastName`, 
`Distinct1`.`EmailAddress`, 

FROM ( SELECT DISTINCT 
`Extent2`.`UserId`, 
`Extent2`.`FirstName`, 
`Extent2`.`LastName`, 
`Extent2`.`EmailAddress`, 

    FROM `AssistantTo` AS `Extent1` 
    INNER JOIN `User` AS `Extent2` ON `Extent1`.`AssistantId` = `Extent2`.`UserId`
    INNER JOIN `CustomTagUser` as `Extent3` ON `Extent3`.`UserId` = `Extent2`.`UserId`
 WHERE `Extent1`.`OwnerId` = 274 AND `Extent3`.`CustomTagId` = 114
 ) AS `Distinct1`

這是我的表結構:

在此處輸入圖片說明

我嘗試使用以下查詢,但它給了我錯誤。

 var assistants =
                    dbContext.AssistantsTo
                        .Include(x => x.Assistant)
                        .Include(x => x.Assistant.CustomTagUser)
                        .Where(at =>
                            at.OwnerId == currentUser.UserId
                            && (at.Assistant.CustomTagUser.Count(y => y.CustomTagId == filter) > 0)
                            )
                        .Select(at => at.Assistant)
                        .Distinct()
                        .ToList();

錯誤:{“'where子句'中的未知列'Extent1.AssistantId'”}

基本上我對過濾器有問題

`Extent3`.`CustomTagId` = 114

我認為我們可以使用any(),但是我對使用大數據和mysql的any()有不好的經驗。

模型類

public class AssistantTo
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int AssistantToId { get; set; }
        public int AssistantId { get; set; }
        [ForeignKey("AssistantId")]
        public virtual User Assistant { get; set; }
        public int OwnerId { get; set; }
        [ForeignKey("OwnerId")]
        public virtual User Owner { get; set; }
    }

    public class CustomTagUser
    {
        [Key]
        public int CustomTagUserId { get; set; }
        public int CustomTagId { get; set; }
        public int UserId { get; set; }
        public DateTime CreatedOn { get; set; }
        [ForeignKey("CustomTagId")]
        public virtual CustomTags CustomTags { get; set; }
        [ForeignKey("UserId")]
        public virtual User User { get; set; }
    }


[Table("User")]
    public class User
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
        public string Password { get; set; }
        .....   
        public ICollection<CustomTagUser> CustomTagUser { get; set; }   
    }
}

基本上,我在EF中應用此部分存在主要問題

AND Extent3.CustomTagId = 114
var assistants =
                    dbContext.AssistantsTo
                        .Include(x => x.Assistant)
                        .Include(x => x.Assistant.CustomTagUser)
                        .Where(at =>
                            at.OwnerId == currentUser.UserId && 
                            (                               
                                at.Assistant.CustomTagUser.Select(x => x.CustomTagId).Contains(filter)
                            )
                        .Select(at => at.Assistant)
                        .Distinct()
                        .ToList();      

試試這個...

暫無
暫無

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

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