我有一个像这样的联系人的课程:
string foundid = "id001"
string foundidvalue = id001.SelectedValue
从我的存储库中我需要过滤具有多个字段和多个值的联系人。我怎么能这样做?我的搜索列表就像这个JSON
public class contacts
{
public string Name {get;set;}
public string Mobile {get;set;}
public string Email {get;set;}
}
调用过滤的更好方法是什么?
答案 0 :(得分:0)
首先将JSON设置为正确的JSON,因为它看起来不正确。不确定你的前端或后端是否有json。如果它在前端,使用AJAX将其发送到后端并使用newtonsoft json将其转换为列表。然后使用以下查询过滤。
var filtered = allContacts.Where(x=>jsonContacts.Any(y=>y.Name == x.Name || y.Mobile==x.Mobile || y.Email==x.Email));
如果你想过滤一下,找到所有与几个字符相匹配的联系人(%like%),那么使用Contains或Starts with或wild card来查找。
答案 1 :(得分:0)
听起来你正在寻找的是Where()和FirstOrDefault()组合。 这意味着您可以编写一个方法,其中包含两个联系人,一个您正在测试的联系人,以及一个您正在寻找的联系人。
IsMatchingContact(var contactToTest, var contactToFind){
if(contactToFind.Name != null){
if(contactToTest.Name != contactToFind.Name){
return false
}
}
if(contactToFind.Mobile != null){
if(contactToTest.Mobile != contactToFind.Mobile){
return false
}
}
if(contactToFind.Email != null){
if(contactToTest.Email != contactToFind.Email){
return false
}
}
}
我认为上述方法可以更简洁地编写,并且非常感谢人们对更好地利用C#必须实现的好处的任何反馈。
然后将它与实现IEnumerable的任何集合上的Where和FirstOrDefault结合使用,假设您已经使用了JSON并使用它创建了一个对象contactIWantToFind。
collectionOfContacts
.Where(x => IsMatchingContact(x, contactIWantToFind))
.FirstOrDefault()
如果您想要返回所有匹配项的集合,请删除FirstOrDefault()方法