Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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
C# Linq到sql.Dynamic,其中:带有System.Linq.Dynamic.ParseException的字符串:类型“myTable”中不存在属性或字段“0”_C#_Entity Framework_Linq_Dynamic_Linq To Sql - Fatal编程技术网

C# Linq到sql.Dynamic,其中:带有System.Linq.Dynamic.ParseException的字符串:类型“myTable”中不存在属性或字段“0”

C# Linq到sql.Dynamic,其中:带有System.Linq.Dynamic.ParseException的字符串:类型“myTable”中不存在属性或字段“0”,c#,entity-framework,linq,dynamic,linq-to-sql,C#,Entity Framework,Linq,Dynamic,Linq To Sql,我正在尝试对其中一个MyTable进行动态查询 为此,我使用以下函数: public async Task<bool> search(DBContext db, M model, string uniqueNonIDField) { Type modelType = model.GetType();//get model of generic object modelInstance = Activator.Cre

我正在尝试对其中一个MyTable进行动态查询

为此,我使用以下函数:

public async Task<bool> search(DBContext db, M model, string uniqueNonIDField)
        {


            Type modelType = model.GetType();//get model of generic

            object modelInstance = Activator.CreateInstance(modelType);

            PropertyInfo field = modelType.GetProperty(uniqueNonIDField); //get property to get existing value


            if (field == null)
                throw new Exception(string.Format("Campo {0} Não encontrado", uniqueNonIDField));

            string value = (string)field.GetValue(model, null); //get value to search in myTable


            field.SetValue(model, Regex.Replace(value, @"[\u002D\u2010\u2012\u2013\u2014]", "-"), null); //do some clean up

            value = (string)field.GetValue(model, null); //get new value after being cleaned


            if (db.Set(modelType).Where(String.Format("@0=@1", uniqueNonIDField, value)).Count() == 0) //Test if there is already any object in myTable with that value.
            {...do stuff}

...
}
如果我硬编码所有表达式,如:

if (db.myTable.Where("existingField=123").Count() == 0){...}
错误持续存在,原因是:

System.Linq.Dynamic.ParseException: No property or field '123' exists in type 'myTable'
我试着按照许多例子中的例子去做,并看到了许多其他类似的答案,但找不到错误的原因。可能是新手犯的错误

您能帮我找到它吗?

您不能像这样以字符串形式传递where语句:WhereexistingField=123,您可以作为表达式谓词来传递。为了传递该表达式,您必须知道要筛选的类型

编辑:样本在哪里 假设您的DbContext中有MyClass,如下所示:

    public class MyClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class MyContext : DbContext
    {
        public DbSet<MyClass> MyClass { get; set; }
    }


可以将字符串传递给where语句。System.Linq.Dynamic允许您按字符串进行筛选

您的代码中似乎一切正常,您的问题可能与此相关:


您是否在dotnetcore下使用此代码?如果是,请安装相关的NuGet软件包,并将using更改为System.Linq.Dynamic.Core

您可以发布一个示例吗?我没有投反对票,但代码确实没有回答问题。。。在编辑之前,这是一个更好的答案:然而,表达式谓词为我指明了解决方案的路径。当它完全实现时,我将在这里插入它。
    public class MyClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class MyContext : DbContext
    {
        public DbSet<MyClass> MyClass { get; set; }
    }

var filteredEntities = dbContext.MyClass.Where(x => x.Name == "test").ToList();