Linq 转换中的 SQL "IN"语句



我有一个SQL查询,我想转换为LINQ,你能帮忙做到这一点吗?

SELECT p.ProductID, p.ProductName FROM tblProducts p
WHERE p.ProductID IN (SELECT s.ProductID FROM tblStock s WHERE s.BarCode = 2222)

在这种情况下,条形码是可为空的类型。

使用 Contains 转换为 'IN':

tblProducts.Where(p => tblStock.Where(ts => ts.BarCode == 2222)
                               .Select(ts => ts.ProductId)
                               .Contains(p.ProductID))
           .Select(p => new {p.ProductID, p.ProductName});

你应该join而不是in

var result = tblProducts
.Join 
(
tblStock.Where(s => s.BarCode = 2222),
p => p.ProductID,
s => s.ProductID,
(p, s) => new { ProductID = p.ProductID, ProductName = p.ProductName }
);

根据您的数据和需求,您还可以添加.Distinct() .

为了提高效率,这应该写成一个内部连接。 在 Linq 中:

var myQuery = from p in myContext.tblProducts
                 join s in myContext.tblStock on p.ProductID equals s.ProductID
                    where s.BarCode = 2222
                       select new { ProductID = p.ProductID, ProductName = p.ProductName };
foreach(var product in myQuery)
{
   // do stuff
}

相关内容

  • 没有找到相关文章

最新更新