在LINQ中,可以连接多个表以组合来自不同数据源的数据。本文解释如何使用LINQ中的lambda表达式执行多表连接。
您尝试连接三个表:Product、Category和ProductCategory。连接后,您希望获得一个组合所有相关类属性的单个类。但是,您编写的代码似乎无法产生预期的结果。
在LINQ lambda表达式中链接多个连接时,中间结果将表示为匿名类型。这意味着每个连接的结果将是一个新的匿名类型,它组合了已连接表的属性。
要获得包含所有相关类属性的单个类,您需要指定要在最终结果中包含的属性。这可以使用Select运算符来完成。
以下是更正后的代码:
<code>var categorizedProducts = product .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc }) .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c }) .Select(m => new { ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId CatId = m.c.CatId // 其他赋值 });</code>
在此代码中,我们首先执行三个表之间的连接并将结果存储在中间匿名类型中。然后,我们使用Select运算符将最终结果投影到一个新的匿名类型中,该类型包括所需的属性(ProdId和CatId)。
您可以使用查询语法而不是lambda表达式来进一步简化代码:
<code>var categorizedProducts = from p in product join pc in productcategory on p.Id equals pc.ProdId join c in category on pc.CatId equals c.Id select new { ProdId = p.Id, // 或 pc.ProdId CatId = c.CatId // 其他赋值 };</code>
查询语法更具可读性,更容易理解,尤其是在涉及多个连接的复杂查询中。
以上是如何使用 LINQ Lambda 表达式高效连接多个表?的详细内容。更多信息请关注PHP中文网其他相关文章!