Estoy usando LINQ to SQL para manejar la base de datos que consulta una aplicación en la que estoy trabajando.Comprobando automáticamente relaciones NULL con consultas LINQ
A los efectos de este ejemplo, imagina que tengo algunas mesas al igual que
- Company
- Product
- Item
- Order
y digamos que una Company
tiene 0 o más Products
, un Product
tiene 0 o más Items
, y un Item
tiene 0 o más Orders
.
Ahora vamos a lo que han obtenido una lista de Orders
, algo así como:
IQueryable<Order> myOrders = GetMyOrders();
Ahora digamos que desea consultar los pedidos de un determinado Company.Name
, pero tienen una situación en la que cada tabla ID padre puede ser NULL
(sé que esto no parece lógico con mis datos de ejemplo, pero es sólo un ejemplo)
Haciendo la suposición de que no hay NULL
identificadores de los padres que podía hacer esto:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
Esto funcionaría bien, sin embargo, debido a que podría haber NULL
valores de identificación principal, necesito verificar cada objeto principal para asegurarme de que no sea null
antes de consultar al siguiente padre (de lo contrario recibiré una excepción). Así que hago algo así como:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
Así que mi pregunta: ¿Hay una manera mejor (en términos de legibilidad y facilidad de codificación) para hacer esto de tener que incluir todos los cheques nulos? Cualquier padre nulo encontrado en el camino debería resultar en la exclusión de la lista resultante.
Por favor, no hay sugerencias para la prevención de los padres nulos, la base de datos no se verá cambiar (y es perfectamente válido de todos modos) pattren
Mejor que en más rendimiento? No lo creo. No puedo pensar de todos modos, puedes deshacerte de todos esos controles 'nulos'. Mejor en cuanto a código más bonito? Me gustaría ir con la sugerencia de Lonli-Lokli. – InBetween
@InBetween: Lo siento, cuando digo mejor, quise decir más para leer. Pero teniendo en cuenta mi comentario a la publicación de Lonli-Lokli, donde mencioné el deseo de finalmente ejecutarlo como una consulta SQL y no devolver primero todos los resultados – musefan
Suena como una aplicación perfecta para uniones internas, que eliminará todos los elementos con referencias nulas . Únase a todas las tablas y filtre el resultado por nombre de compañía. (Pero esto no será más legible) – Stephan