如何从具有两个条件的两个表中进行选择

本文关键字:两个 行选 选择 条件 | 更新日期: 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;