- 概要
- Null判定
IsNull(key)
IsNotNull(key)
- 同値の判定
Equal(key, value)
NotEqual(key, value)
- 数値範囲の判定
LessThan(key, val)
LessEqual(key, val)
GreaterEqual(key, val)
GreaterThan(key, val)
Between(key, min, max)
- リストに含まれるかの判定
- Contain(key, val)
- NotContain(key, val)
- 論理結合
And(queries...)
Or(queries...)
- 具体例
入室時や部屋検索のときに、部屋の公開プロパティ(Room.PublicProps
)を使ってフィルタリングすることができます。
このフィルタリング条件はQuery
オブジェクトで指定します。
Query
の条件にマッチする部屋のみ、検索や入室の対象になります。
Query
クラスの各メソッドはQuery
オブジェクト自身を返すので、メソッドチェインの形で記述できます。
Query IsNull(string key);
Query IsNotNull(string key);
公開プロパティのkey
の値がnull
のときIsNull()
はマッチします。
型に関わらず値が入っているときIsNull
は非マッチとなります。
IsNotNull()
はその逆です。
key
が存在しないときはどちらもマッチしません。
Query Equal(string key, T val);
Query Not(string key, T val);
型T
は、bool
, char
, string
,
sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
,
float
, double
のいずれかです。
公開プロパティのkey
の値が、T
型でval
と等しいときにEqual()
はマッチします。
T型でval
と異なるときにNot()
はマッチします。
key
が存在しない時、値の型がT
と異なる時はどちらも常にマッチしません。
Query LessThan(string key, T val);
Query LessEqual(string key, T val);
Query GreaterEqual(string key, T val);
Query GreaterThan(string key, T val);
Query Between(string key, T min, T max);
型T
は、
sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
,
float
, double
のいずれかです。
公開プロパティのkey
の値がT
型で、val
との大小関係が合致しているときにマッチします。
Between()
はmin
、max
を範囲に含みます。
key
が存在しない時、値の型がT
と異なる時はいずれも常にマッチしません。
Query Contain(string key, T val);
Query NotContain(string key, T val);
型T
は、bool
, char
, string
,
sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
,
float
, double
のいずれかです。
公開プロパティのkey
の値が配列またはリスト型で、その要素としてT
型でval
と等しいものが含まれるときContain()
はマッチします。
そのような要素が含まれないときにNotContain()
はマッチします。
key
が存在しないときや配列またはリスト型では無かったときは、いずれもマッチしません。
Query And(param Query[] queries);
Query Or(param Query[] queries);
And()
は、与えられたQuery
の全てがマッチしているときにマッチします。
Or()
は、与えられたQuery
の少なくとも1つがマッチしているときにマッチします。
空のQueryは常にマッチします。
部屋の公開プロパティに、次の情報を設定しておきます。
HostUserId
: ホストのユーザIDRecentlyMatchedIds
: ホストが最近対戦したユーザのIDのリスト
マッチング条件のクエリで次のように指定することで、 ホスト・ゲストのどちらから見ても最近対戦したユーザとのマッチングを避けることができます。
var query = new Query();
// 自身の最近対戦したユーザにホストが含まれないこと
for (var recentlyMatchedId in recentlyMatchedIds)
{
query.NotEqual("HostUserId", recentlyMatchedId);
}
// ホストの最近対戦したユーザリストに自身が含まれないこと
query.NotContain("RecentlyMatchedIds", myId);