2013-01-10 4 views
0

j'ai deux tables qui a une relation, je veux interroger à partir avec deux conditions, comme ceci:comment choisir entre deux tables avec deux conditions dans LINQ

var data = from d in db.table1 
      where !d.isdeleted & d.table2.Where(dm => !dm.isdeleted) 
      select d; 

mais je cette erreur:

Operator '&' cannot be applied to operands of type 'bool' and 'System.Collections.Generic.IEnumerable'

Thanx

+5

&& pas et ....................... –

+0

Je pense que votre question est liée à celle dirigée [lien ] [1] [1]: http://stackoverflow.com/questions/679644/multiple-where-clause-in-linq – user1965135

Répondre

1

Peut-être que c'est ce que vous êtes après?

var data = from d in db.table1 
      where !d.isdeleted && d.table2.All(dm => !dm.isdeleted) 
      select d; 

Cela permet de sélectionner les lignes de table1isdeleted est faux et toutes les lignes correspondantes dans table2 ont isdeleted égale à false.

+0

merci pour la réponse mais les données de retour sauter toutes les colonnes de table1 tandis que table2 de toute colonne a isdeleted égale à false – DreamsDotNet

1

S'ils sont liés, vous pouvez joindre les tables ...

public class Program 
{ 
    private static void Main(string[] args) 
    { 
     List<ItemA> itemATable = new List<ItemA>(new[] 
      { 
       new ItemA {Id = "A1", IsDeleted = true}, 
       new ItemA {Id = "A2", IsDeleted = false}, 
      }); 

     List<ItemB> itemBTable = new List<ItemB>(new[] 
      { 
       new ItemB {Id = "B1", ItemAId = "A1", IsDeleted = true}, 
       new ItemB {Id = "B2", ItemAId = "A1", IsDeleted = false}, 
       new ItemB {Id = "B3", ItemAId = "A2", IsDeleted = true}, 
       new ItemB {Id = "B4", ItemAId = "A2", IsDeleted = false}, 
      }); 

     var test = from a in itemATable 
        join b in itemBTable on a.Id equals b.ItemAId 
        where !a.IsDeleted && !b.IsDeleted 
        select new { a, b }; 
    } 
} 

public class ItemA 
{ 
    public string Id { get; set; } 
    public bool IsDeleted { get; set; } 
} 

public class ItemB 
{ 
    public string Id { get; set; } 
    public string ItemAId { get; set; } 
    public bool IsDeleted { get; set; } 
} 
1

Vous devriez faire deux changements

1. Changement & to && (ce n'est pas obligatoire, mais une bonne pratique jusqu'à ce que vous vouliez exécuter le second opérande dans tous les cas)

2. Remplacez IEnumerable<T> (or IQueryable<T>) par bool. Au lieu de Where, utilisez Any

var data = from d in db.table1 
     where !d.isdeleted && d.table2.Any(dm => !dm.isdeleted) 
     select d;