- 概要
- 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);