如何解决LINQ 将项目列表转换为具有冗余值的行的查找
我相信标题没有太大帮助,我会在这里尝试更好地解释......希望你能帮助我。
我有这门课
public class ItemValue
{
public string SetId {get; set;}
public string ItemId {get; set;}
public string Value {get; set;}
}
IEnumerable<ItemValue> = new List<ItemValue>()
{
new ItemValue
{
SetId = "S1",ItemId = "I1",Value = "S1I1V",},new ItemValue
{
SetId = "S1",ItemId = "I2",Value = "S1I2V",ItemId = "I3",Value = "S1I3V",new ItemValue
{
SetId = "S2",Value = "S2I1V",Value = "S2I2V1",Value = "S2I2V2",ItemId = "V3",Value = "S2I3V",}
};
注意有 2 个实例的 SetId="S2"
和 ItemId="I2"
具有不同的值
我需要的是使用 LINQ 将此集合映射到类似的内容
var expectedResult = new Lookup<string,IDictionary<string,string>>()
{
["S1"] = new Dictionary<string,string>()
{
{ ["I1"] = "S1I1V" },{ ["I2"] = "S1I2V" },{ ["I3"] = "S1I3V" },["S2"] = new Dictionary<string,string>()
{
{ ["I1"] = "S2I1V" },{ ["I2"] = "S2I2V1" },{ ["I3"] = "S2I3V" },{ ["I2"] = "S2I2V2" },}
};
我自己并不擅长 LINQ,在经历了一些不成功的 LINQ 试验和使用一堆 foreach 和 ifs 的丑陋解决方案之后,我现在联系您,请您对此提出一些想法。
如果您需要任何其他信息,请告诉我
非常感谢您!...
解决方法
你可以用 GroupBy 和 ToDictionary/ToLookup 做类似的事情
var dict = items.GroupBy(i => i.SetId)
.ToDictionary(
group => group.Key,group => group.ToLookup(i => i.ItemId,i => i.Value));
dict["S2"]["I2"].ToList() // usage example
另一种选择是
var dict2 = items.ToLookup(i => (i.SetId,i.ItemId),i => i.Value);
dict2[("S2","I2")].ToList() // usage example
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。