Ответ 1
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
Это должно быть легко.
Я хочу проверить, совпадают ли два списка в том, что они содержат все те же элементы или нет, причем заказы не важны.
Дублированные элементы считаются равными, т.е. new[]{1,2,2}
совпадает с new[]{2,1}
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
Изменить: Это было написано до того, как OP добавил, что {1, 2, 2} равно {1, 1, 2} (относительно обработки повторяющихся записей).
Это будет работать до тех пор, пока элементы будут сопоставимы для заказа.
bool equal = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
SetEquals HashSet лучше всего подходит для проверки того, являются ли два набора равными, как определено в этом вопросе
string stringA = "1,2,2";
string stringB = "2,1";
HashSet<string> setA = new HashSet<string>((stringA.Trim()).Split(',').Select(t => t.Trim()));
HashSet<string> setB = new HashSet<string>((stringB.Trim()).Split(',').Select(t => t.Trim()));
bool isSetsEqual = setA.SetEquals(setB);
ССЫЛКА:
Вам нужно получить пересечение двух списков:
bool areIntersected = t1.Intersect(t2).Count() > 0;
В ответ на ваш измененный вопрос:
bool areSameIntersection = t1.Except(t2).Count() == 0 && t2.Except(t1).Count() == 0;
Если количество элементов list1 в списке2 равно количеству элементов списка2 в списке1, тогда списки содержат одинаковое количество элементов, оба являются подмножествами друг друга - другими словами, оба они содержат одни и те же элементы.
if (list1.Count(l => list2.Contains(l)) == list2.Count(l => list1.Contains(l)))
return true;
else
return false;