我正在重构一些代码,只在我的数据库查询中使用linq,并且遇到了这个问题:
public void ListaGruposPorListaResolutores ()
{
List<Mosaq.Sae.Model.Entidades.GrupoResolutor> grupoResolutor;
using (var contexto = new Sae.Model.Entidades.Entidades())
{
var temp = from rg in contexto.ResolutoresGrupos
where rg.Resolutor.id == 62 || rg.Resolutor.id == 110
select (rg.Grupo);
grupoResolutor = temp.ToList();
//contexto.ResolutoresGrupos.Where(rg => rg.Resolutor.id == 62 || rg.Resolutor.id == 110).Select(rg => rg.Grupo).ToList();
}
Assert.That(grupoResolutor.Count, Is.EqualTo(13), "Extrae 13 grupos");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - MONITOREO" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC - MONITOREO\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - Networking" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC - Networking\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "Terreno COASIN Casa Matriz" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"Terreno COASIN Casa Matriz\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "Terreno COASIN Ventanas" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"Terreno COASIN Ventanas\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - Calidad" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - Aplicaciones" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC - Calidad\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - SAP" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC - SAP\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "NOC - Versionamiento" && grupo.tipo == "E" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"NOC - Versionamiento\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "N3CO_CM_MANTSIGER" && grupo.tipo == "I" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"N3CO_CM_MANTSIGER\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "N3CO_CM_CC_SAP_WMS" && grupo.tipo == "I" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"N3CO_CM_CC_SAP_WMS\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "N3CO_CM_DOES_ SAP" && grupo.tipo == "I" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"N3CO_CM_DOES_ SAP\" está en la lista");
Assert.That(grupoResolutor.Any(grupo => grupo.nombre == "N3CO_CM_Monitoreo" && grupo.tipo == "I" && grupo.solicitaTiempos && !grupo.ingresaCondicionCierre).Equals(true), "El grupo \"N3CO_CM_Monitoreo\" está en la lista");
}
查询仅匹配传递where子句中第一个条件的元素。我的查询或代码中的其他内容是否有问题?上下文是连接到sql server的实体框架数据模型。
谢谢!
编辑 - 这是旧代码:
using System.Collections.Generic;
using System.Linq;
using Mosaq.Sae.Model.Entidades;
namespace Mosaq.Sae.Model.Conectores
{
public static class GruposResolutores
{
/// <summary>
/// Listar todos los grupos resolutores en la base de datos.
/// </summary>
/// <returns></returns>
public static List<GrupoResolutor> Listar()
{
using (var contexto = new Entidades.Entidades())
{
return contexto.GruposResolutores.ToList();
}
}
/// <summary>
/// Extraer el grupo resolutor especificado.
/// </summary>
/// <param name="id">Id del grupo requerido.</param>
/// <returns></returns>
public static List<GrupoResolutor> Listar(int id)
{
using (var contexto = new Entidades.Entidades())
{
return contexto.GruposResolutores.Where(grupoResolutor => grupoResolutor.id == id).ToList();
}
}
/// <summary>
/// Listar los grupos resolutores a los que pertenece el resolutor especificado.
/// </summary>
/// <param name="resolutor">El resolutor.</param>
/// <returns></returns>
public static List<GrupoResolutor> Listar(Resolutor resolutor)
{
using (var contexto = new Entidades.Entidades())
{
return contexto.ResolutoresGrupos.Where(navResolutorGrupo => navResolutorGrupo.Resolutor.id == resolutor.id).Select(navResolutorGrupo => navResolutorGrupo.Grupo).ToList();
}
}
/// <summary>
/// Listar los grupos resolutores a los que pertenecen los resolutores en la lista especificada.
/// </summary>
/// <param name="resolutores">Los resolutores.</param>
/// <returns>Una lista de los grupos resolutores.</returns>
public static List<GrupoResolutor> Listar(IEnumerable<Resolutor> resolutores)
{
var gruposResolutoresConcatenados = new List<GrupoResolutor>();
foreach (var resolutor in resolutores)
{
gruposResolutoresConcatenados.AddRange(Listar(resolutor));
}
return gruposResolutoresConcatenados.Distinct(new ComparadorGrupos()).ToList();
}
public static List<GrupoResolutor> Listar (Empresa empresa)
{
using (var contexto = new Entidades.Entidades())
{
return
contexto.GruposResolutoresEmpresas.Where(grupoEmpresa => grupoEmpresa.Empresa.id == empresa.id).
Select(grupoEmpresa => grupoEmpresa.GrupoResolutor).ToList();
}
}
class ComparadorGrupos : IEqualityComparer<GrupoResolutor>
{
public bool Equals(GrupoResolutor x, GrupoResolutor y)
{
return x.id == y.id;
}
public int GetHashCode(GrupoResolutor obj)
{
return obj.id.GetHashCode();
}
}
}
}
谢谢!
编辑2:sql profiler给我以下命令:
SELECT
[Extent1].[grupo_resolutor_id] AS [grupo_resolutor_id],
[Extent2].[id] AS [id],
[Extent2].[nombre] AS [nombre],
[Extent2].[tipo_grupo] AS [tipo_grupo],
[Extent2].[solicita_tiempos] AS [solicita_tiempos],
[Extent2].[creado_por] AS [creado_por],
[Extent2].[created_at] AS [created_at],
[Extent2].[updated_at] AS [updated_at],
[Extent2].[ingresa_cond_cierre] AS [ingresa_cond_cierre],
[Extent2].[ver_en_sae] AS [ver_en_sae],
[Extent3].[categoria_grupo_id] AS [categoria_grupo_id],
[Extent3].[especialidad_id] AS [especialidad_id],
[Extent3].[tipo_atencion_id] AS [tipo_atencion_id]
FROM [dbo].[agentes_grupos] AS [Extent1]
INNER JOIN [dbo].[grupos_resolutores] AS [Extent2] ON [Extent1].[grupo_resolutor_id] = [Extent2].[id]
left JOIN [dbo].[grupos_resolutores] AS [Extent3] ON [Extent1].[grupo_resolutor_id] = [Extent3].[id]
WHERE [Extent1].[resolutor_id] in (62, 110)
它看起来没问题但只选择id为62的实体:S
再次感谢您的帮助!