如何在linq中选择两个具有两个条件的表

时间:2013-01-10 00:38:35

标签: c# linq-to-sql

我有两个有关系的表,我想用两个条件来查询它,如:

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

但我有这个错误:

  

运营商'&'不能应用于'bool'类型的操作数   'System.Collections.Generic.IEnumerable'

感谢名单

3 个答案:

答案 0 :(得分:1)

也许这就是你追求的目标?

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

这将从table1中选择isdeleted为假的行,table2isdeleted的所有相应行等于false。

答案 1 :(得分:1)

如果它们相关,您可以加入表格......

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; }
}

答案 2 :(得分:1)

您应该进行两项更改

1。更改& to &&(这不是必需的,但在您希望在所有情况下执行第二个操作数之前,这是一个很好的做法)

2。将IEnumerable<T> (or IQueryable<T>)更改为bool。而不是Where,请使用Any

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