0

このQueryOverで、ログ名がDまたはFで始まるログレコードを選択します(ワイルドカードを使用)。

conv.InnerTransaction.Session.QueryOver<Log>()
    .Where(l => l.DateTime > _datetime)
    .And(
        l => l.Name.IsLike("D%") || l.Name.IsLike("F%")
     )

代わりに、リストの値を動的に使用して名前を検索したいと考えています。これはどのように行うことができますか?

私は次のようなことを試しました:

var query = conv.InnerTransaction.Session.QueryOver<Log>()
            .Where(l => l.DateTime > _datetime);
foreach (var name in _names)
{
    query = query.And(l => l.Name.IsLike(name));
}

ただし、リスト内の名前ごとに複数の AND ステートメントが発生しますが、必要なのは OR だけです。

4

1 に答える 1

3

試しましたDisjunctionか?かつて同様の要件がありましたが、Conjunction代わりに使用する必要がありました。複数の条件が一緒にDisjunctionなります。or

var disjunction = new Disjunction();
var query = Session.QueryOver<Log>().Where(l => l.DateTime > _datetime);
foreach (var name in _names)
{
    disjunction.Add(Restrictions.On<Log>(log => log.Name).IsLike(name));
}
var queryResult = query.Where(disjunction).List<Log>();
于 2013-04-18T12:03:56.213 に答える