Linq Any retourne toujours vrai

J’ai utilisé Linq to Entities pendant de nombreuses années, mais c’est la première fois que je suis confronté à ce problème. J’ai des tables pour les astuces et les articles , chaque astuce pouvant avoir de nombreux articles. Je n’ai que 3 articles dans la firebase database. lors de la modification d’un élément, je veux m’assurer que le champ GivenId est unique pour les éléments ayant le même conseil. J’utilise ceci:

Item item =db.Items.FirstOrDefault(c => c.Id == id); if (item != null) { if (db.Items .Any(x => x.GivenId == newGivenId && x.Id != item.Id && x.TipId == item.TipId)) { //newGivenId is either different or if it is the same, //it belongs to the same item } else { //newGivenId already exists for an Item in the same tip } } 

mais

  db.Items .FirstOrDefault(x => x.GivenId == newGivenId && x.Id != item.Id && x.TipId == item.TipId); 

renvoie null comme prévu.

Je sais que je peux l’utiliser comme:

 Item it = db.Items .FirstOrDefault(x => x.GivenId == newGivenId && x.Id != item.Id && x.TipId == item.TipId); if(it==null) { } else { } 

Mais je veux juste trouver ce qui ne va pas avec Any .

PS: Tous les typeof(int) 3 d’entre eux) sont typeof(int)

MODIFIER:

Voici la requête SQL générée:

 DECLARE @p__linq__0 AS SQL_VARIANT; DECLARE @p__linq__1 AS SQL_VARIANT; DECLARE @p__linq__2 AS SQL_VARIANT; SET @p__linq__0 = NULL; SET @p__linq__1 = NULL; SET @p__linq__2 = NULL; SELECT CASE WHEN ( EXISTS (SELECT 1 AS [C1] FROM [dbo].[Items] AS [Extent1] WHERE ([Extent1].[GivenId] = @p__linq__0) AND ([Extent1].[Id]  @p__linq__1) AND (([Extent1].[TipId] = @p__linq__2) OR (([Extent1].[TipId] IS NULL) AND (@p__linq__2 IS NULL))) )) THEN cast(1 as bit) ELSE cast(0 as bit) END AS [C1] FROM ( SELECT 1 AS X ) AS [SingleRowTable1] 

EF classes générées:

 public partial class Item { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public Item() { this.Parts = new HashSet(); } public int Id { get; set; } public Nullable TipId { get; set; } public Nullable GivenId { get; set; } public ssortingng FileId { get; set; } public Nullable Carve { get; set; } public Nullable Mina { get; set; } public Nullable Deleted { get; set; } public virtual Tip Tip { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection Parts { get; set; } } public partial class Tip { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public Tip() { this.Items = new HashSet(); } public int Id { get; set; } public ssortingng Name { get; set; } public Nullable ModelId { get; set; } public Nullable Deleted { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection Items { get; set; } public virtual Model Model { get; set; } }