在动态linq查询中解析字符串值以更正类型

时间:2014-11-14 10:44:19

标签: linq entity-framework dynamic dynamic-linq

我正在尝试使用System.Linq.Dynamic程序集创建动态LINQ表达式。我有一个列列表,我想搜索用户提交的特定值。 E.g

如果用户在搜索中输入5,则它将搜索为该值指定的列。当我将始终被视为字符串的搜索文本与具有不同类型的列进行比较时,我的问题出现了。我已经读过列的类型的所有示例都是预先知道的并且使用了正确的类型,似乎我需要能够将搜索字符串解析为正确的类型或.ToString()数据库值然而,这会打破null。请参阅下面的代码片段:

public IEnumerable<Product> GetProducts(string searchText, List<string> searchFields)
{
    var products = dbSet.Where(p => !p.IsDisabled); //dbSet is a global variable linking to the products table

    foreach (var searchField in searchFields)
    {
        products = products.Where(searchField + ".ToString() == @0", searchText);
    }

    return products.OrderBy(p => p.ASPNo);
}

提前感谢任何正确方向的帮助/指示

1 个答案:

答案 0 :(得分:0)

您是否尝试在将searchField传递给.ToString()之前检查foreach (var searchField in searchFields) { products = products.Where(searchField + " != null && " + searchField + ".ToString() == @0", searchText); } 所以做一些像:

{{1}}