А не противоречит ли такая запись самой идее чистого кода?
Противоречит. Это действительно очень сложно читать.
Но давай пошагово разберём:
1.
str2.All
Все символы из str2 удовлетворяют условию
str1.Count(y=>y==x)>=str2.Count(y=>y==x)
2.
str1.Count(y=>y==x) >=
- в str1 количество искомых символов больше либо равно
3.
str2.Count(y=>y==x)
- количеству искомых символов в str2
Тоесть этот код проверяет, что в str1 каждый символ продублирован больше раз, чем в str2.
Кроме достаточно сложного выражения, тут пониманию мешают ещё и названия переменных, которые совершенно не отражают в себе то, что они содержат.
Я бы этот код переписал так:
// Эта функция считает, сколько раз каждый символ повторяется в строке
static Dictionary<char, int> CountChars(IEnumerable<char> str) =>
str
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
var str1CharCount = CountChars(str1);
var str2CharCount = CountChars(str2);
// Истинно, когда каждый символ из второй строки повторяется меньше или столько-же раз, как и в первой.
return str2CharCount.All(x => x.Value <= str1CharCount[x.Key]);