我有一个我正在处理的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。
请帮我解决这个问题
答案 0 :(得分:1)
您可以按CategoryId
和CategoryName
进行分组,然后投放到新的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();