Ответ 1
Там хорошее объяснение Мэтта Уоррена в The Moth:
"Причина, по которой С# имеет слово" equals "вместо оператора" == ", заключалась в том, чтобы было ясно, что предложение" on "требует, чтобы вы поставляли два отдельных выражения, которые сравниваются для равенства, а не одно предикатное выражение. объединяйте шаблоны сопоставлений с стандартным оператором запросов Enumerable.Join(), который задает два отдельных делегата, которые используются для вычисления значений, которые затем могут быть сопоставлены. Он нуждается в них как отдельные делегаты, чтобы создать таблицу поиска с одним и зондировать в поиске таблицу с другим. Полный процессор запросов, такой как SQL, может свободно анализировать одно предикатное выражение и выбирать, как он будет обрабатывать его. Однако для того, чтобы LINQ работал с SQL, требуется, чтобы условие соединения всегда указывалось как выражение дерева, значительные накладные расходы для простого объекта в памяти."
Однако это относится к join
. Я не уверен, что equals
должен использоваться в вашем примере кода (он даже компилируется?).