我有一些属性列表作为模型
public class AnswerList {
public int ID { get; set; }
public int? Schedule_ID { get; set; }
public int? SubItemID { get; set; }
public string SubItemName { get; set; }
public string ItemName { get; set; }
public string Answer { get; set; }
public string Remarks { get; set; }
public string Remarks_Flag { get; set; }
public string Lattitude { get; set; }
public string Longitude { get; set; }
public DateTime? Load_Date { get; set; }
}
我从此列表中获取了不同子项目列表
List<string> sub_item_list = AnswerList.Select(x => x.SubItemName).Distinct().ToList();
现在我想要按照以下类别
的不同格式的数据public class SubItemList {
public string ItemName { get; set; }
public string SubItemName { get; set; }
}
我的要求是使用各自的项目名称获取不同的子项目,子项目应该是不同的,但项目名称可以重复,因为一个项目可以包含多个子项目
Distinct不适用于多个值,所以我尝试了
List<SubItemList> SI_List =
AnswerList.GroupBy(d => d.SubItemID)
.Select(x =>
new SubItemList
{
ItemName = x.Select(a => a.ItemName).First(),
SubItemName = x.Select(a => a.SubItemName).First()
}).Distinct().ToList();
这样我就能得到我想要的东西,但我认为这不是一个更好的方法, Linq表达了另一个Linq表达式
如何使用简单的Linq表达式获取它?
我正在使用ASP.Net Core 2.0
答案 0 :(得分:1)
尝试
GroupBy(
p => new {p.ItemName, p.SubItemName}
).Select(g => new { g.Key.ItemName, g.Key.SubItemName });
答案 1 :(得分:1)
如果期望是您在问题中提出的要求,那么以下是查询:
AnswerList.GroupBy(d => new { d.SubItemID, d.ItemName, d.SubItemName})
.Select(x => new SubItemList{
ItemName = x.Key.ItemName,
SubItemName =x.Key.SubItemName
}
).Distinct();
工作原理
SubItemID
,ItemName
,SubItemName
的唯一组合,将形成分组键ItemName
,SubItemName
创建SubItemList
并调用Distinct即可在SubItemID
要让Distinct
能够正确使用课程SubItemList
,请实施IEquatable<SubItemList>
或向{Dist>提供IEqualityComparer<SubItemList>