簡體   English   中英

檢查OrderBy字符串是否有效

[英]Check if OrderBy string is valid

var query = db.Customers
          .Where("City == @0 and Orders.Count >= @1", "London", 10)
          .OrderBy(someStringVariable)
          .Select("new(CompanyName as Name, Phone)");

在運行此查詢之前,如何通過表達式檢查someStringVariable是否為有效訂單? 我想檢查它而不是捕獲ParseException。

  • 有效字符串:“城市ASC,電話DESC”
  • 無效的字符串不是DESC中存在的字段或類型錯誤:“ City1 DESC1”

在Anu的幫助下,我正在使用此函數,但我希望在Linq.Dynamic命名空間中使用一些“ TryParseQuery”。

    public static bool IsValidOrderString(Type type, string ordering)
    {
        if (string.IsNullOrWhiteSpace(ordering)) return false;

        var orderList = ordering.Trim().Split(',');
        var fields = type.GetProperties().Select(property => property.Name).ToArray();
        foreach (var orderItem in orderList)
        {
            var order = orderItem.TrimEnd();
            if (order.EndsWith(" ASC", StringComparison.InvariantCultureIgnoreCase) || order.EndsWith(" DESC", StringComparison.InvariantCultureIgnoreCase)) order = order.Substring(0, order.Length - 4);
            if (!fields.Contains(order.Trim())) return false;
        }

        return true;
    }

正如@mjwills指出的那樣,要實現100%的可靠性很難,但是您可以做的一件事就是將“ someStringVariable”與表中的列列表進行比較。 您可以通過找到列列表

.GetProperties().Select(property => property.Name).ToArray();

同樣,您需要意識到這有很多陷阱。 屬性可以映射到與屬性名稱不同的列名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM