using System; using System.Collections.Generic; using System.Linq; using System.Text; public class Test { public static void Main() { var customerAddresses = new[] { new // address #1 { customer_id = 6676979, customer_address_seq = 1, customer_address_match_codes = new [] { new { customer_address_seq = 1, customer_id = 6676979, customer_match_code_id = 5 } } }, new // address #2 { customer_id = 6677070, customer_address_seq = 1, customer_address_match_codes = new [] { new { customer_address_seq = 1, customer_id = 6677070, customer_match_code_id = 4 }, new { customer_address_seq = 1, customer_id = 6677070, customer_match_code_id = 5 }, new { customer_address_seq = 1, customer_id = 6677070, customer_match_code_id = 3 } } }, new // address #3 { customer_id = 6677070, customer_address_seq = 2, customer_address_match_codes = new [] { new { customer_address_seq = 2, customer_id = 6677070, customer_match_code_id = 4 }, new { customer_address_seq = 2, customer_id = 6677070, customer_match_code_id = 5 } } } }; var result = (from c in customerAddresses let isMatch = c.customer_address_match_codes .Where (cu => cu.customer_match_code_id == 4).Any () && c.customer_address_match_codes .Where (cu => cu.customer_match_code_id == 5).Any () let betterMatch = isMatch && c.customer_address_match_codes .Where (cu => cu.customer_match_code_id == 3).Any () ? 1 : 0 where isMatch == true orderby betterMatch descending, c.customer_id, c.customer_address_seq select c) .FirstOrDefault (); Console.WriteLine(result); } }