¿Por qué no se enlaza? Simplemente use el operador == en join si t puede usarlo en una cláusula 'where'?¿Por qué el operador 'igual' en LINQ se une?
Respuesta
Los dos lados de la igualdad en una unión se tratan como dos expresiones lambda separadas que generan las claves para las dos secuencias.
from category in categories
join prod in products on category.ID equals prod.CategoryID
categories.Join(products,
category => category.ID,
prod => prod.CategoryID,
(category, prod) => new { Category = category, Product=prod });
El uso de la palabra clave equals lo hace inequívoco cuando una lambda termina y la otra comienza. Para una cláusula donde, por el contrario, hay una sola expresión lambda que decide si cada elemento coincide:
from prod in products
where prod.CategoryID == 1
products.Where(prod => prod.CategoryID == 1)
En teoría, se une podría haber sido implementado con una sola lambda como
from category in categories
join prod in products on category.ID == prod.CategoryID
categories.Join(products,
(category, prod) => category.ID == prod.CategoryID,
(category, prod) => new { Category = category, Product=prod });
Sin embargo Al calcular dos teclas y hacer la comparación, LINQ puede usar tablas hash para calcular la unión de manera más eficiente que si tuviera que ejecutar una comparación arbitraria para cada par de elementos.
Tendría que preguntar a los diseñadores, pero está claro que permitir cualquier expresión (booleana) permitiría demasiadas posibilidades. Usar una palabra clave especial como equals
hace que sea mucho más fácil restringirla a la especificación como 2 columnas apropiadas.
Encontré una discusión en The Moth.
- 1. ¿Por qué Linq se une de manera diferente
- 2. LINQ to NHibernate duplicados se une
- 3. Cruz se une Contexto - LINQ/C#
- 4. ¿Por qué "**" se une más fuertemente que la negación?
- 5. Usando el operador no igual en Cakephp
- 6. ¿Por qué el operador% se conoce como el operador "módulo" en lugar del operador "restante"?
- 7. Operador Python no igual
- 8. Operador sobrecarga == versus Igual()
- 9. ¿Qué se une con SQLite?
- 10. ¿Por qué anular el operador()?
- 11. ¿Por qué el cortocircuito y el operador no se cortocircuitan?
- 12. ?: Operador en consulta LINQ
- 13. Operador "IN" en Linq
- 14. ¿Por qué el operador Pythons + = (más igual) no modifica las variables de las funciones internas?
- 15. ¿Cuál es el operador === (triple-igual) en Scala Koans?
- 16. sobrecarga de php igual-operador
- 17. El operador condicional se confunde, pero ¿por qué?
- 18. Cómo utilizar el operador IN en linq
- 19. ¿Por qué incluso necesitamos el operador "delete []"?
- 20. Usando el operador correcto, o preferible, no igual en MySQL
- 21. El punto de PHP es igual al operador `. =` En Javascript?
- 22. ¿Hay un operador "no igual" en Python?
- 23. Usando LINQ no es igual
- 24. se une a ints vs une en chars (o varchars)
- 25. LINQ Operador distintivo, ignora el caso?
- 26. LINQ to SQL se une con múltiples cláusulas de la sintaxis tradicional vs. sintaxis de unión
- 27. Operador de Linq IN
- 28. Powershell se une a
- 29. ¿Por qué RewriteRule? funciona igual que^(. *) $?
- 30. ¿Por qué FLT_MIN es igual a cero?
Eso tiene sentido. – ProfK