Skip to content

Latest commit

 

History

History
132 lines (98 loc) · 4.58 KB

query.md

File metadata and controls

132 lines (98 loc) · 4.58 KB

Query クラス

目次

概要

入室時や部屋検索のときに、部屋の公開プロパティ(Room.PublicProps)を使ってフィルタリングすることができます。 このフィルタリング条件はQueryオブジェクトで指定します。 Queryの条件にマッチする部屋のみ、検索や入室の対象になります。

Queryクラスの各メソッドはQueryオブジェクト自身を返すので、メソッドチェインの形で記述できます。

Null判定

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()minmaxを範囲に含みます。

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: ホストのユーザID
  • RecentlyMatchedIds: ホストが最近対戦したユーザのIDのリスト

マッチング条件のクエリで次のように指定することで、 ホスト・ゲストのどちらから見ても最近対戦したユーザとのマッチングを避けることができます。

var query = new Query();

// 自身の最近対戦したユーザにホストが含まれないこと
for (var recentlyMatchedId in recentlyMatchedIds)
{
    query.NotEqual("HostUserId", recentlyMatchedId);
}

// ホストの最近対戦したユーザリストに自身が含まれないこと
query.NotContain("RecentlyMatchedIds", myId);