/// <summary> /// 指定した文字列を <see cref="Karamem0.LinqToCalil.CalilCheckResult"/> のコレクションに変換します。 /// </summary> /// <param name="text">変換対象の <see cref="System.String"/>。></param> /// <returns>変換された <see cref="System.Collections.Generic.IEnumerable{T}"/>。</returns> public static IEnumerable <CalilCheckResult> Parse(string text) { if (string.IsNullOrEmpty(text) == true) { return(null); } return(CalilCheckResult.Parse(XElement.Parse(text, LoadOptions.None))); }
/// <summary> /// 指定した式ツリーを使用して蔵書検索を実行します。 /// </summary> /// <param name="expression">式ツリーを示す <see cref="System.Linq.Expressions.Expression"/>。</param> /// <returns>実行結果を示す <see cref="System.Object"/>。</returns> public override object Execute(Expression expression) { using (var client = new HttpClient()) { var builder = new CalilCheckExpressionBuilder() { AppKey = this.AppKey, Format = this.Format, }; var expr = builder.Create(expression); while (true) { var uri = new UriQueryParser(expr).Parse(this.BaseUriString); var text = client.GetStringAsync(uri).Wait <string>(); if (text == null) { return(null); } var xml = XElement.Parse(text, LoadOptions.None); if ((bool)xml.Element("continue") == true) { if (this.OnPolling == null || this.OnPolling.Invoke(CalilCheckResult.Parse(xml)) != true) { return(null); } Task.Delay(PollingInterval).Wait(); expr = builder.Create((string)xml.Element("session")); } else { return(CalilCheckResult.Parse(xml)); } } ; } }