me encontré con el mismo comportamiento extraño. El código C# es
public DbSet<Document> Documents { get; set; }
List<Document> = Documents
.Where(d => d.BusinessId = 818)
.Where(d => d.CurrencyId != null)
.ToList();
pero la instrucción SQL generada es la siguiente:
exec sp_executesql N'SELECT
[Extent1].[DocumentId] AS [DocumentId],
[Extent1].[DateCreated] AS [DateCreated],
...
FROM [dbo].[Documents] AS [Extent1]
WHERE [Extent1].[BusinessId] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=818
Claramente LINQ hace caso omiso de la cláusula (d => d.CurrencyId! = Null) .Where.
Mi solución fue la siguiente:
List<Document> = Documents
.Where(d => d.BusinessId = 818)
.ToList() // <== Gel all documents and filter in memory
.Where(d => d.CurrencyId != null)
.ToList();
Nota: Técnicamente mover el filtro no es nulo de LINQ a SQL para objetos LINQ a.
Muy ineficaz ya que seleccionamos TODOS los documentos en la memoria y los filtramos allí (en lugar de filtrar en el nivel db).
En mi caso, el número de registros suele ser pequeño, por lo que la solución funcionó para mí.
¿Cuál es el tipo de datos de nombre? – Clayton