Во-первых, мы можем добавить публичные методы получения в наш класс. Это лучший способ сделать поля приватными и получить доступ к их значениям с помощью общедоступных методов получения:
public class UserAnswerToQue {
// ...
public int Qu_Id => this._Qu_Id;
public string Title => this._Title;
// ...
}
Наш фиктивный список ответов:
List<UserAnswerToQue> lstGetUserAnswerIndex = new List<UserAnswerToQue>() {
new UserAnswerToQue(1, "Water"),
new UserAnswerToQue(2, "Metal"),
};
Ваш ListFinalTrueAnswer во втором блоке кода фактически является списком кортежей . Это можно определить здесь:
select (x.qu_Id, x.ans_Title)
Итак, давайте создадим фиктивный список, который представляет ваш список кортежей:
var ListFinalTrueAnswer = new List<Tuple<int, string>>() {
new Tuple<int, string> (1, "Water"),
new Tuple<int, string> (2, "Wood"),
};
Теперь мы можем проверить наш фиктивный список ответов:
lstGetUserAnswerIndex.Where(x => ListFinalTrueAnswer.Contains(new Tuple<int, string>(x.Qu_Id, x.Title)))
Это довольно сложная операция, поэтому мы можем немного переписать наш запрос:
var ListFinalTrueAnswer2 = from x in FilteredTrueReceivedAnswerList select new { x.qu_Id, x.ans_Title }
Теперь у нас есть IEnumarable из анонимных классов. И наш список сравнения:
lstGetUserAnswerIndex.Where(x => ListFinalTrueAnswer2.Any(y => (y.qu_Id == x.Qu_Id) && (y.ans_Title == x.Title)))