字典<(字符串,字符串,字符串),列表<object>>如何获取与此类字典的1键匹配的值



我有一个使用字符串组合的字典。

using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
List<People> listName = new List<People>(){
new People(){firstname = "David", middlename = "Broom", lastname = "Lightning", value = 1},
new People(){firstname = "Dave", middlename = "Cak", lastname = "Londo", value = 2},
new People(){firstname = "Chris", middlename = "Vanglein", lastname = "Walls", value = 3},
new People(){firstname = "Rudy", middlename = "Affair", lastname = "Master", value = 4}};
Dictionary<(string, string, string), List<People>> data = listName
.Where(x => x.value != 0)
.GroupBy(x => (x.firstname, x.middlename, x.lastname))
.ToDictionary(x => x.Key, x => x.ToList());
}
public class People {
public string firstname {get; set;}
public string middlename {get; set;}
public string lastname {get; set;}
public int value {get; set;}
}
}

https://dotnetfiddle.net/dGTHv7

当我只有 2 个键名字和姓氏时如何获取值。

我想获取所有匹配的名字和姓氏并忽略中间名。

如果您需要检索仅包含 2 个信息的数据,那么拥有一个键是这 3 个信息的组合的字典是没有意义的。

直接解析列表怎么样?

var matchingPeople = listName.Where(p => p.firstname == "myfirstname" && p.lastname == "mylastname");

编辑: 然后你需要这样做:

var listName = new List<People>
{
new People { firstname = "David", middlename = "Broom", lastname = "Lightning", value = 1 },
new People { firstname = "Dave", middlename = "Cak", lastname = "Londo", value = 2 },
new People { firstname = "Chris", middlename = "Vanglein", lastname = "Walls", value = 3 },
new People { firstname = "Rudy", middlename = "Affair", lastname = "Master", value = 4 }
};
var data = listName
.Where(x => x.value != 0)
.GroupBy(x => (x.firstname, x.middlename, x.lastname))
.ToDictionary(x => x.Key, x => x.ToList());
var myfirstname = "David";
var mylastname = "Broom";
var matchingPeople = data.Where(x => x.Key.firstname == myfirstname && x.Key.lastname == mylastname).SelectMany(x => x.Value);

您需要使用.Where(...)来筛选数据,.Select(...)选择字典的.Value部分。由于.Value是一个列表,因此结果将是ListList,因此请使用.SelectMany而不是.Select将这些List聚合到单个list中。

最新更新