我有两个有关系的表,我想用两个条件来查询它,如:
var data = from d in db.table1
where !d.isdeleted & d.table2.Where(dm => !dm.isdeleted)
select d;
但我有这个错误:
运营商'&'不能应用于'bool'类型的操作数 'System.Collections.Generic.IEnumerable'
感谢名单
答案 0 :(得分:1)
也许这就是你追求的目标?
var data = from d in db.table1
where !d.isdeleted && d.table2.All(dm => !dm.isdeleted)
select d;
这将从table1
中选择isdeleted
为假的行,table2
中isdeleted
的所有相应行等于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;