[英]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。
在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.