Possible Bug in Entity Framework

cinfis 1 Reputation point
2022-12-09T22:39:49.477+00:00

Link of bug description...

CREATE TABLE IF NOT EXISTS users (  
    UserId int auto_increment,  
    RegisterId int,  
    PRIMARY KEY(UserId)  
);  
  
CREATE TABLE IF NOT EXISTS products (  
    ProductId int auto_increment,  
    ProductName varchar(10),  
    UserId int,  
    PRIMARY KEY(ProductId)  
);  
ALTER TABLE products   
ADD CONSTRAINT FK_products_users_UserId  
FOREIGN KEY (UserId) REFERENCES users(UserId) ON DELETE CASCADE;  
  
INSERT INTO users values( 1, 3);  
INSERT INTO products values (1, "Television", 1) ;   
INSERT INTO products values (2, "IPhone", 1) ;  
INSERT INTO products values (3, "Television", 1) ;  
using (var db = new someEntities())  
{  
   var dbReturn = db.users.Join(db.products,  
                    x => x.UserId,  
                    y => y.UserId,  
                    (x, y) => new  
                    {  
                        x.RegisterId,  
                        x.UserId,  
                        y.ProductId,  
                        y.ProductName  
                    })  
                    .Where(w => w.UserId == 1)  
                    .GroupBy(g => g.RegisterId)  
                    .Where(w => w.OrderByDescending(o => o.ProductId)  
                          .FirstOrDefault()  
                          .ProductName == "Television")  
                    .Select(t => new  
                    {  
                        ProductId = t.Select(s => s.ProductId)  
                                        .FirstOrDefault(),  
                        ProductName = t.Select(s => s.ProductName)  
                                        .FirstOrDefault(),  
                        Key = t.Key,  
                    })  
                    .ToList();  
   Console.WriteLine(dbReturn.FirstOrDefault().ProductId);  
}  

Unexpectedly, i get an error saying

MySqlException: Unknown column 'Join1.RegisterId' in 'where clause'".

When i query (generated sql) in mysql than i get same error as expected.

There is no AS JOIN1 in sql query.

So, what is wrong with my linq query?

SELECT   
1 AS `C1`,  
CASE WHEN (`Project8`.`C1` IS NOT NULL) THEN (`Project8`.`C2`)  ELSE (0) END AS `C2`,   
`Project8`.`C3`,   
`Project8`.`RegisterId`  
 FROM (SELECT   
`Project6`.`RegisterId`,   
`Project6`.`C1`,   
`Project6`.`C2`,   
(SELECT   
`Extent10`.`ProductName`  
 FROM `users` AS `Extent9` INNER JOIN `products` AS `Extent10` ON `Extent9`.`UserId` = `Extent10`.`UserId`  
 WHERE (1 = `Extent9`.`UserId`) AND ((`Project6`.`RegisterId` = `Extent9`.`RegisterId`) OR ((`Project6`.`RegisterId` IS  NULL) AND (`Extent9`.`RegisterId` IS  NULL))) LIMIT 1) AS `C3`  
 FROM (SELECT   
`Project4`.`RegisterId`,   
`Project4`.`C1`,   
(SELECT   
`Extent8`.`ProductId`  
 FROM `users` AS `Extent7` INNER JOIN `products` AS `Extent8` ON `Extent7`.`UserId` = `Extent8`.`UserId`  
 WHERE (1 = `Extent7`.`UserId`) AND ((`Project4`.`RegisterId` = `Extent7`.`RegisterId`) OR ((`Project4`.`RegisterId` IS  NULL) AND (`Extent7`.`RegisterId` IS  NULL))) LIMIT 1) AS `C2`  
 FROM (SELECT   
`Apply1`.`RegisterId`,   
(SELECT   
`Extent6`.`ProductId`  
 FROM `users` AS `Extent5` INNER JOIN `products` AS `Extent6` ON `Extent5`.`UserId` = `Extent6`.`UserId`  
 WHERE (1 = `Extent5`.`UserId`) AND ((`Apply1`.`RegisterId` = `Extent5`.`RegisterId`) OR ((`Apply1`.`RegisterId` IS  NULL) AND (`Extent5`.`RegisterId` IS  NULL))) LIMIT 1) AS `C1`  
 FROM (SELECT   
`Distinct1`.`RegisterId`,   
(SELECT   
`Project2`.`ProductId`  
 FROM (SELECT   
`Extent4`.`ProductId`,   
`Extent4`.`ProductName`  
 FROM `users` AS `Extent3` INNER JOIN `products` AS `Extent4` ON `Extent3`.`UserId` = `Extent4`.`UserId`  
 WHERE (1 = `Extent3`.`UserId`) AND ((`Join1`.`RegisterId` = `Extent3`.`RegisterId`) OR ((`Join1`.`RegisterId` IS  NULL) AND (`Extent3`.`RegisterId` IS  NULL)))) AS `Project2`  
 ORDER BY   
`Project2`.`ProductId` DESC LIMIT 1) AS `ProductId`,   
(SELECT   
`Project2`.`ProductName`  
 FROM (SELECT   
`Extent4`.`ProductId`,   
`Extent4`.`ProductName`  
 FROM `users` AS `Extent3` INNER JOIN `products` AS `Extent4` ON `Extent3`.`UserId` = `Extent4`.`UserId`  
 WHERE (1 = `Extent3`.`UserId`) AND ((`Join1`.`RegisterId` = `Extent3`.`RegisterId`) OR ((`Join1`.`RegisterId` IS  NULL) AND (`Extent3`.`RegisterId` IS  NULL)))) AS `Project2`  
 ORDER BY   
`Project2`.`ProductId` DESC LIMIT 1) AS `ProductName`  
 FROM (SELECT  DISTINCT   
`Extent1`.`RegisterId`  
 FROM `users` AS `Extent1` INNER JOIN `products` AS `Extent2` ON `Extent1`.`UserId` = `Extent2`.`UserId`  
 WHERE 1 = `Extent1`.`UserId`) AS `Distinct1`) AS `Apply1`  
 WHERE @gp1 = `Apply1`.`ProductName`) AS `Project4`) AS `Project6`) AS `Project8`  
.NET
.NET
Microsoft Technologies based on the .NET software framework.
3,401 questions
{count} votes