diff --git a/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj b/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj
new file mode 100644
index 0000000..05fe632
--- /dev/null
+++ b/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj
@@ -0,0 +1,29 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+ Internal\LCLiveQueryHeartBeat.cs
+
+
+ Internal\LCLiveQueryConnection.cs
+
+
+ LCLiveQuery.cs
+
+
+ LCQueryExtension.cs
+
+
+
+
+ ..\..\UnityLibs\Newtonsoft.Json.dll
+
+
+
diff --git a/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj b/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj
new file mode 100644
index 0000000..7a7440b
--- /dev/null
+++ b/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netcoreapp3.1
+
+ false
+ 0.1.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiveQuery/LiveQuery.Test/LiveQuery.cs b/LiveQuery/LiveQuery.Test/LiveQuery.cs
new file mode 100644
index 0000000..9689daf
--- /dev/null
+++ b/LiveQuery/LiveQuery.Test/LiveQuery.cs
@@ -0,0 +1,180 @@
+using NUnit.Framework;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using Newtonsoft.Json;
+using LeanCloud;
+using LeanCloud.Storage;
+using LeanCloud.LiveQuery;
+
+using static NUnit.Framework.TestContext;
+
+namespace LiveQuery.Test {
+ internal class Account : LCObject {
+ internal int Balance {
+ get {
+ return (int)this["balance"];
+ }
+ set {
+ this["balance"] = value;
+ }
+ }
+
+ internal Account() : base("Account") { }
+ }
+
+ public class LiveQuery {
+ private LCLiveQuery liveQuery;
+
+ private Account account;
+
+ [SetUp]
+ public async Task Setup() {
+ LCLogger.LogDelegate += Print;
+ LCApplication.Initialize("ikGGdRE2YcVOemAaRbgp1xGJ-gzGzoHsz",
+ "NUKmuRbdAhg1vrb2wexYo1jo",
+ "https://ikggdre2.lc-cn-n1-shared.com");
+
+ LCObject.RegisterSubclass("Account", () => new Account());
+
+ LCQuery query = new LCQuery("Account");
+ query.WhereGreaterThan("balance", 100);
+ liveQuery = await query.Subscribe();
+ }
+
+ [TearDown]
+ public void TearDown() {
+ LCLogger.LogDelegate -= Print;
+ }
+
+ [Test]
+ [Order(0)]
+ public async Task Create() {
+ TaskCompletionSource