I am getting JSON responses from API:
"table1": [
{
"abc": "test",
"def": "test1"
},
{
"abc": "test2",
"def": "User1"
}
]
which is binding into
public List<object>? table1 { get; set; }
I want to get the User1 using Linq/Lamda. Below returns 0 record:
var filteredList = table1
.Where(item =>
item.GetType().GetProperty("def",BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase)?.GetValue(item)?.ToString() is "User1" or "User2")
.ToList();
What is wrong with it
I don't see why you attempt with System.Reflection and pattern matching is
here.
Either with the help of the JSON library such as Newtonsoft.Json to read/parse the object's field:
using Newtonsoft.Json.Linq;
string[] filters = new string[] {"User1", "User2"};
var filteredList = table1
.Where(item => filters.Contains(JObject.FromObject(item)?.SelectToken("def").ToString()))
.ToList();
Or if you know the structure of your Table
object, you define and use the model class instead of object
type:
public class Root
{
public List<Table>? table1 { get; set; }
}
public class Table
{
public string Abc { get; set; }
public string Def { get; set; }
}
string[] filters = new string[] {"User1", "User2"};
var filteredList = table1
.Where(item => filters.Contains(item.Def))
.ToList();