使用 lambda 搜索字典数组值
dictionary array value search using lambda
如何使用 lambda 表达式搜索作为对象的字典值。 (使用下面的 类)
Dictionary<int, House[]> houseDict = new Dictionary<int, House[]>();
假设有 3 个元素,每个元素有 10 个房子。
如何根据元素
找到属于客户的 house/houses
这是我目前所知道的,但不知道如何缩小到 houseNumber
houseDict[0].Where(s => s.GetCustomer() == theCustomer)
这不起作用 -> houseDict[0].SelectMany(s => s.GetHouseNumber()).Where(c => c.GetCustomer() == theCustomer);
public class House
{
private static int _instances = 0;
private int houseNumber;
private bool sold;
private bool reserved;
private bool free;
private Customer customer;
public House(int theHouseNumber)
{
houseNumber = theHouseNumber;
sold = false;
reserved = false;
free = true;
}
~House()
{
_instances--;
}
public void SellHouse(Customer buyer)
{
customer = buyer;
sold = true;
free = false;
}
public void ReserveHouse(Customer reserver)
{
customer = reserver;
free = false;
sold = false;
reserved = true;
}
public void ReturnHouse()
{
customer = null;
free = true;
sold = false;
reserved = false;
}
public void BuyReservedHouse(Customer buyer)
{
sold = true;
}
public bool IsFree()
{
return free;
}
public bool IsReserved()
{
return reserved;
}
public int GetHouseNumber()
{
return houseNumber;
}
public void SetCustomer(Customer buyer)
{
customer = buyer;
}
public Customer GetCustomer()
{
return customer;
}
}
public class Customer
{
private static int _instances = 0;
private String name;
private int id = 0;
public Customer(String customerName)
{
_instances++;
name = customerName;
id = _instances;
}
public String GetName()
{
return name;
}
public int GetId()
{
return id;
}
}
如果特定客户的房屋分布在多个 ID 上,那么您需要搜索所有值集合:
houseDict.SelectMany(kvp => kvp.Value)
.Where(s => s.GetCustomer() == theCustomer)
这假定 theCustomer
实例 是多值集合中的同一个实例。如果你想根据 ID 进行匹配,那么你可以使用:
houseDict.SelectMany(kvp => kvp.Value)
.Where(s => s.GetCustomer().GetId() == theCustomer.GetId())
听起来你想搜索字典,而不仅仅是字典中的第一项。只要你有一个using System.Linq;
语句,你应该可以这样做:
houseDict.ToList().Where(s => s.Value.GetCustomer() == theCustomer);
这会将您的字典更改为列表>,您可以使用 lambda 表达式。
如何使用 lambda 表达式搜索作为对象的字典值。 (使用下面的 类)
Dictionary<int, House[]> houseDict = new Dictionary<int, House[]>();
假设有 3 个元素,每个元素有 10 个房子。
如何根据元素
找到属于客户的 house/houses这是我目前所知道的,但不知道如何缩小到 houseNumber
houseDict[0].Where(s => s.GetCustomer() == theCustomer)
这不起作用 -> houseDict[0].SelectMany(s => s.GetHouseNumber()).Where(c => c.GetCustomer() == theCustomer);
public class House
{
private static int _instances = 0;
private int houseNumber;
private bool sold;
private bool reserved;
private bool free;
private Customer customer;
public House(int theHouseNumber)
{
houseNumber = theHouseNumber;
sold = false;
reserved = false;
free = true;
}
~House()
{
_instances--;
}
public void SellHouse(Customer buyer)
{
customer = buyer;
sold = true;
free = false;
}
public void ReserveHouse(Customer reserver)
{
customer = reserver;
free = false;
sold = false;
reserved = true;
}
public void ReturnHouse()
{
customer = null;
free = true;
sold = false;
reserved = false;
}
public void BuyReservedHouse(Customer buyer)
{
sold = true;
}
public bool IsFree()
{
return free;
}
public bool IsReserved()
{
return reserved;
}
public int GetHouseNumber()
{
return houseNumber;
}
public void SetCustomer(Customer buyer)
{
customer = buyer;
}
public Customer GetCustomer()
{
return customer;
}
}
public class Customer
{
private static int _instances = 0;
private String name;
private int id = 0;
public Customer(String customerName)
{
_instances++;
name = customerName;
id = _instances;
}
public String GetName()
{
return name;
}
public int GetId()
{
return id;
}
}
如果特定客户的房屋分布在多个 ID 上,那么您需要搜索所有值集合:
houseDict.SelectMany(kvp => kvp.Value)
.Where(s => s.GetCustomer() == theCustomer)
这假定 theCustomer
实例 是多值集合中的同一个实例。如果你想根据 ID 进行匹配,那么你可以使用:
houseDict.SelectMany(kvp => kvp.Value)
.Where(s => s.GetCustomer().GetId() == theCustomer.GetId())
听起来你想搜索字典,而不仅仅是字典中的第一项。只要你有一个using System.Linq;
语句,你应该可以这样做:
houseDict.ToList().Where(s => s.Value.GetCustomer() == theCustomer);
这会将您的字典更改为列表>,您可以使用 lambda 表达式。