【问题标题】:Parsing string values to correct type in dynamic linq queries解析字符串值以纠正动态 linq 查询中的类型
【发布时间】:2015-01-11 17:42:16
【问题描述】:

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

如果用户在搜索中输入 5,那么它将搜索为该值指定的列。当我将始终被视为字符串的搜索文本与具有不同类型的列进行比较时,就会出现我的问题。我读过的所有示例列的类型都是事先知道的并且使用了正确的类型,看来我需要能够将搜索字符串解析为正确的类型或 .ToString() 数据库值,但是这会中断为空。请参阅下面的 sn-p 代码:

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);
}

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

【问题讨论】:

  • 你可以试试"Convert.ToString("+searchField+")"

标签: linq entity-framework dynamic dynamic-linq


【解决方案1】:

您是否尝试在将searchField 传递给.ToString() 之前检查其是否为空
因此,请执行以下操作:

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

【讨论】:

  • 感谢您的回复。我现在遇到了可空类型的问题,因为除非它们有值并且我需要对 .Value 进行 .ToString,否则我无法对它们进行 ToString。我现在希望在搜索字段中包含类型,以便我可以编写一个函数来转换每种不同的类型。我认为这也将允许我进行不同的比较,例如大于等...
  • 应该可以的。如果您仍然遇到问题,您可以随时编辑问题
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多