In LINQ, multiple tables can be joined to combine data from different data sources. This article explains how to perform multi-table joins using lambda expressions in LINQ.
You are trying to join three tables: Product, Category, and ProductCategory. After concatenation, you want to obtain a single class that combines all relevant class properties. However, the code you wrote doesn't seem to produce the expected results.
When chaining multiple connections in a LINQ lambda expression, intermediate results are represented as anonymous types. This means that the result of each join will be a new anonymous type that combines the properties of the joined tables.
To get a single class that contains all relevant class attributes, you need to specify the attributes you want to include in the final result. This can be done using the Select operator.
The following is the corrected code:
<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>
In this code, we first perform a join between three tables and store the result in an intermediate anonymous type. We then use the Select operator to project the final result into a new anonymous type that includes the required properties (ProdId and CatId).
You can further simplify your code by using query syntax instead of lambda expressions:
<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>
Query syntax is more readable and easier to understand, especially in complex queries involving multiple joins.
The above is the detailed content of How to Efficiently Join Multiple Tables Using LINQ Lambda Expressions?. For more information, please follow other related articles on the PHP Chinese website!