0

関係のある2つのテーブルがあり、次のように2つの条件でクエリを実行します。

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

しかし、私はこのエラーがあります:

演算子「&」は、「bool」型および「System.Collections.Generic.IEnumerable」型のオペランドには適用できません。

ありがとう

4

3 に答える 3

1

多分これはあなたが求めているものですか?

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

これにより、falseの行が選択され、対応するすべての行がtable1falseに等しくなります。 isdeletedtable2isdeleted

于 2013-01-10T00:50:16.263 に答える
1

2つの変更を行う必要があります

1。に変更&&&ます(これは必須ではありませんが、すべての場合に2番目のオペランドを実行するまでは良い習慣です)

2。に変更IEnumerable<T> (or IQueryable<T>)boolます。の代わりにWhereAny

var data = from d in db.table1
       where !d.isdeleted && d.table2.Any(dm => !dm.isdeleted) 
       select d;
于 2013-01-10T02:50:21.937 に答える
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; }
}
于 2013-01-10T02:35:10.197 に答える