Пример #1
0
 /// <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)));
 }
Пример #2
0
 /// <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));
             }
         }
         ;
     }
 }