0

私はそのような外部キーを使用してリンクされているテーブルのセットを持っています

A 1----* B 

つまり、Aは多くのBレコードを持つことができます。

特定のフラグが関数に渡された場合にB.isMax==trueであるすべてのAレコードを返すために「where」句を追加する必要があります。これをどう処理するかわかりません。

public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax)
    {
        var q = from a in Context.A
                select a;

        if (AID > 0)
        {
            q = q.Where(c => c.AID == AID);
        }

        if (!string.IsNullOrEmpty(AName))
        {
            q = q.Where(c => c.Name.Contains(AName));
        }

        if (isActive != null)
        {
            q = q.Where(c => c.IsActive == isActive);
        }

        if (isMax != null)
        {
            // ???? Can't do this. How can I implement this kind of thing??
            q = q.Where(c => c.B.IsMax == isMax);
        }

        List<A> ret = q.ToList();

        return ret;
    }

何かご意見は??

4

3 に答える 3

2

あなたが使用することができますAny

q = q.Where(c => c.B.Any(i => i.IsMax == isMax));

Anyシーケンスのいずれかの要素が条件を満たすかどうかを確認するために使用されます

于 2013-03-01T17:32:57.697 に答える
1

どういう意味Anyですか?

q = q.Where(c => c.B.Any(b => b.IsMax == isMax));
于 2013-03-01T17:33:33.653 に答える
0

あなたはどう思いますか、この良い考えはこのようなことをしますか?

public List<A> GetA(int AID, string AName, bool? isActive, bool? isMax)
{
    return Context.A
            .Where(c =>
                       (AID <= 0 || c.AID == AID)
                    && (string.IsNullOrEmpty(AName) || c.Name.Contains(AName))
                    && (isActive == null || c.IsActive == isActive)
                    && (isMax == null || c.B.Any(b => IsMax == isMax))
                  )
            .ToList();
}
于 2013-03-01T17:48:06.857 に答える