繁体   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