C# Linq到sql.Dynamic,其中:带有System.Linq.Dynamic.ParseException的字符串:类型“myTable”中不存在属性或字段“0”
我正在尝试对其中一个MyTable进行动态查询 为此,我使用以下函数: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
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();