I need to filter my data based on a Boolean condition using Linq on ASP.NET Web Api 2 C#. But my JSON data returns null when I try filtering the data.
The data is a List of Invites, I want to filter the results based on a MemberID and if the user is attending(IsAttending)
Here is the Member Model
public class Member
{
public int MemberID { get; set; }
public string MemberName { get; set; }
public bool IsAdmin { get; set; }
public bool IsAttending { get; set; }
public int MemberNumber { get; set; }
public string PhoneNumber { get; set; }
public int InviteID { get; set; }
[JsonIgnore]
public virtual Invite Iinvite { get; set; }
}
InviteModel
public class Invite
{
public int InviteID { get; set; }
public string Subject { get; set; }
public string DateTime { get; set; }
public virtual List<Member> Members { get; set; }
}
Original JSON data without filtering
[{
"InviteID": 1,
"Subject": "Hell",
"DateTime": "March 2017",
"Members": [{
"MemberID": 1,
"MemberName": "roger",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 1
},
{
"MemberID": 2,
"MemberName": "nkosi",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 1
},
{
"MemberID": 3,
"MemberName": "Mphile",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 1
}]
},
{
"InviteID": 2,
"Subject": "Hell",
"DateTime": "March 2018",
"Members": [{
"MemberID": 4,
"MemberName": "roger",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 2
},
{
"MemberID": 5,
"MemberName": "nkosi",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 2
},
{
"MemberID": 6,
"MemberName": "Mphile",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 2
}]
},
{
"InviteID": 3,
"Subject": "Hell",
"DateTime": "Marchs 2017",
"Members": [{
"MemberID": 7,
"MemberName": "Roger Nkosi",
"IsAdmin": false,
"IsAttending": true,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 3
},
{
"MemberID": 8,
"MemberName": "nkosi",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 3
},
{
"MemberID": 9,
"MemberName": "Mphile",
"IsAdmin": false,
"IsAttending": false,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 3
}]
},
{
"InviteID": 4,
"Subject": "Hell",
"DateTime": "Marchs 2017",
"Members": [{
"MemberID": 10,
"MemberName": "Roger Nkosi",
"IsAdmin": false,
"IsAttending": true,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 4
},
{
"MemberID": 11,
"MemberName": "nkosi",
"IsAdmin": false,
"IsAttending": true,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 4
},
{
"MemberID": 12,
"MemberName": "Mphile",
"IsAdmin": false,
"IsAttending": true,
"MemberNumber": 0,
"PhoneNumber": null,
"InviteID": 4
}]
}]
Here is how I filter and return the data
return db.invites.Include("members").ToList()
.Where(x => x.Members == db.members
.Where(xx => xx.IsAttending == true && xx.MemberID == 4)).ToList();
IsAttendingboth true and false for a specific invite? It's not clear how deep you want your result to be filtered, that's why I asked you to add your expected result inside the question.IsAttending == true && MemberID == 4.