在动态linq查询中解析字符串值以更正类型
我正在尝试使用System.LINQ.dynamic程序集创建动态LINQ表达式。我有一个列列表,我想搜索用户提交的特定值。例如 如果用户在搜索中输入5,则将搜索为该值指定的列。当我将搜索文本(始终被视为字符串)与具有不同类型的列进行比较时,会出现我的问题。我读过的列类型的所有示例都是已知的,并且使用了正确的类型,似乎我需要能够将搜索字符串解析为正确的类型,或者.ToString()解析为数据库值,但是这会因null而中断。请参见下面的代码片段:在动态linq查询中解析字符串值以更正类型,linq,entity-framework,dynamic,dynamic-linq,Linq,Entity Framework,Dynamic,Dynamic Linq,我正在尝试使用System.LINQ.dynamic程序集创建动态LINQ表达式。我有一个列列表,我想搜索用户提交的特定值。例如 如果用户在搜索中输入5,则将搜索为该值指定的列。当我将搜索文本(始终被视为字符串)与具有不同类型的列进行比较时,会出现我的问题。我读过的列类型的所有示例都是已知的,并且使用了正确的类型,似乎我需要能够将搜索字符串解析为正确的类型,或者.ToString()解析为数据库值,但是这会因null而中断。请参见下面的代码片段: public IEnumerable<Pr
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);
}
public IEnumerable GetProducts(字符串搜索文本,列表搜索字段)
{
var products=dbSet.Where(p=>!p.IsDisabled);//dbSet是链接到products表的全局变量
foreach(搜索字段中的var searchField)
{
products=products.Where(searchField+“.ToString()==@0”,searchText);
}
退货产品。订购人(p=>p.ASPNo);
}
提前感谢您向正确方向提供的任何帮助/指针在将
搜索字段传递给.ToString()
之前,您是否尝试过检查该字段是否为空
所以你可以这样做:
foreach (var searchField in searchFields)
{
products = products.Where(searchField + " != null && " + searchField + ".ToString() == @0", searchText);
}
谢谢你的回复。我现在遇到了可空类型的问题,因为除非它们有一个值并且我需要.ToString.value,否则我无法对它们进行字符串化。我现在希望在searchfield中包含这些类型,这样我就可以编写一个函数来转换每种不同的类型。我认为这也将允许我做不同的比较,如大于,等等…这应该很好。如果仍然遇到问题,您可以随时编辑问题您可以尝试“Convert.ToString(“+searchField+”)