使用linq填充另一个类的类

时间:2014-04-30 19:59:20

标签: c# linq

我有一个我正在处理的MVC5应用程序。

我在应用程序中有一种情况,我必须从列表中找到不同的元素,但稍微调整一下。

让我解释一下这个场景。

我有一个产品和类别类: -

**Product**

ProductId
ProducName
CategoryId
CategoryName

**Category**

CategoryId
CategoryName

我有多个产品,所以我正在处理产品清单: -

List<Product> listProducts = new List<Product>();

所有产品可以属于同一类别或多个类别。所以我想在类别类中获得所有不同的类别列表。

要找到不同的类别,我们可以使用linq如下: -

var listProductCategories = listProducts.Select(x =&gt; x.CategoryName).Distinct()。ToList();

但这会返回一个List,我希望List同时包含CategoryId和CategoryName。

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

您可以按CategoryIdCategoryName进行分组,然后投放到新的Category项目,例如:

var query = listProducts.GroupBy(r => new { r.CategoryId, r.CategoryName })
            .Select(grp => new Category
            {
                CategoryId = grp.Key.CategoryId,
                CategoryName = grp.Key.CategoryName
            });

如果您想获得ToList

,可以在查询末尾添加List<Category>

答案 1 :(得分:1)

以下是基于您的问题的查询 如果列表具有相似的记录,则此查询将返回不同的记录。

 List<Product> listProducts1 = new List<Product>();

 var productNames = listProducts.Select(prod => new { CategoryId = prod.CategoryId, CategoryName = prod.CategoryName }).Distinct();

//This query would returns distict records based on the Category class data.

Category cat=new Category();

var productNames2 = listProducts.Where(prod => prod.CategoryId == cat.CategoryId).Select(prod => new { CategoryId = prod.CategoryId, CategoryName = prod.CategoryName }).Distinct();