web-dev-qa-db-fra.com

non null dans LINQ

Quelle serait la syntaxe correcte dans LINQ pour rechercher des enregistrements non nuls? J'utilise le code ci-dessous mais en vain.

Merci beaucoup pour toute aide.

              var list = (from t in dal.table
                          where t.name != null);
12
MdeVera

Vous avez oublié de select.

var list = (from t in dal.table
            where t.name != null
            select t);
24
BoltClock
3
Chris Hawkins

J'ai rencontré le même comportement étrange. Le code C # est

public DbSet<Document> Documents { get; set; }
List<Document> = Documents
    .Where(d => d.BusinessId = 818)
    .Where(d => d.CurrencyId != null)
    .ToList();

mais l'instruction SQL générée est la suivante:

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    

Clairement, LINQ ignore la clause .Where (d => d.CurrencyId! = Null).

Ma solution était la suivante:

List<Document> = Documents
    .Where(d => d.BusinessId = 818)
    .ToList() // <== Gel all documents and filter in memory
    .Where(d => d.CurrencyId != null)
    .ToList();

Remarque: Techniquement, nous déplaçons le filtre NOT Null de Linq-To-Sql à Linq-To-objects.

Très inefficace puisque nous sélectionnons TOUS les documents en mémoire et les filtrons (au lieu de filtrer au niveau de la base de données).

Dans mon cas, le nombre d'enregistrements est généralement faible, la solution a donc fonctionné pour moi.

2
Dror