Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在动态linq查询中解析字符串值以更正类型_Linq_Entity Framework_Dynamic_Dynamic Linq - Fatal编程技术网

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

在动态linq查询中解析字符串值以更正类型,linq,entity-framework,dynamic,dynamic-linq,Linq,Entity Framework,Dynamic,Dynamic Linq,我正在尝试使用System.LINQ.dynamic程序集创建动态LINQ表达式。我有一个列列表,我想搜索用户提交的特定值。例如 如果用户在搜索中输入5,则将搜索为该值指定的列。当我将搜索文本(始终被视为字符串)与具有不同类型的列进行比较时,会出现我的问题。我读过的列类型的所有示例都是已知的,并且使用了正确的类型,似乎我需要能够将搜索字符串解析为正确的类型,或者.ToString()解析为数据库值,但是这会因null而中断。请参见下面的代码片段: public IEnumerable<Pr

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

如果用户在搜索中输入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);
}
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+”)