如何从具有两个条件的两个表中进行选择
本文关键字:两个 行选 选择 条件 | 更新日期: 2023-09-27 17:51:06
我有两个有关系的表,我想用两个条件来查询,像这样:
var data = from d in db.table1
where !d.isdeleted & d.table2.Where(dm => !dm.isdeleted)
select d;
但是我有这个错误:
操作符'&'不能应用于'bool'和类型的操作数"System.Collections.Generic.IEnumerable"
谢谢
也许这就是你想要的?
var data = from d in db.table1
where !d.isdeleted && d.table2.All(dm => !dm.isdeleted)
select d;
这将从table1
中选择isdeleted
为假并且table2
中所有相应的行isdeleted
等于假的行。
如果它们是相关的,你可以连接表…
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。将&
更改为&&
(这不是必需的,但在所有情况下都希望执行第二个操作数之前,这是一个很好的做法)
2。将IEnumerable<T> (or IQueryable<T>)
修改为bool
。用Any
Where
var data = from d in db.table1
where !d.isdeleted && d.table2.Any(dm => !dm.isdeleted)
select d;