使用动态 Linq 查询子字符串时出错
Error When Querying For A Substring Using Dynamic Linq
我正在尝试使用动态 linq 从使用实体的数据库中获取一部分人
框架(EF)。我 运行 在使用 contains 操作时遇到了问题。这是实体
为了人民 table:
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}
这是一个成功运行的查询。
var people = personContext
.People
.OrderBy("id asc")
.Skip(0)
.Take(5)
.ToList();
请注意,我在 OrderBy 方法中使用了动态 linq。但是,当我尝试申请时
过滤,我得到一个例外。
var people = personContext
.People
.Where("id.Contains(15)")
.OrderBy("id asc")
.Skip(0)
.Take(5)
.ToList();
我想找回的是id中包含子串“15”的人的子集,例如:
"015", "115", "151", "152", etc.
当我执行代码时,出现以下错误。
System.Linq.Dynamic.ParseException was unhandled by user code
Message=No applicable method 'Contains' exists in type 'String'
确定 Id 字段是否包含字符串“15”的语法是什么?
您不能在 LINQ 查询中使用 Contains。相反,你可以试试这个
var people = (from p in personContext.Set<People>()
where p.Id.Contains("15")
orderby p.Id
select p).Skip(0).Take(5).ToList();
我觉得这里有误解...你不应该像这样使用 LINQ。
首先,您需要调用接受 lambda 的重载;然后在 lambda 中指定 属性,如果它是一个字符串,则在其上调用 Contains
。像这样:
var people = personContext
.People
.Where(p => p.Id.Contains("15"))
.OrderByDescending(p => p.Id)
.Skip(0) // You don't need this line.
.Take(5)
.ToList();
EF 本身将完成繁重的工作,并将这些纯 C# 代码转换为正确的 SQL 语句。
What is the syntax for determining if the Id field contains the string "15"?
嗯,绝对不是 .Where("id.Contains(15)")
,它试图用 numeric 值 15 调用方法 Contains
。
根据 documentation,您可以使用 字符串文字:
.Where("id.Contains(\"15\")")
.Where("id.Contains(@0)", "15")
我正在尝试使用动态 linq 从使用实体的数据库中获取一部分人 框架(EF)。我 运行 在使用 contains 操作时遇到了问题。这是实体 为了人民 table:
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}
这是一个成功运行的查询。
var people = personContext
.People
.OrderBy("id asc")
.Skip(0)
.Take(5)
.ToList();
请注意,我在 OrderBy 方法中使用了动态 linq。但是,当我尝试申请时 过滤,我得到一个例外。
var people = personContext
.People
.Where("id.Contains(15)")
.OrderBy("id asc")
.Skip(0)
.Take(5)
.ToList();
我想找回的是id中包含子串“15”的人的子集,例如:
"015", "115", "151", "152", etc.
当我执行代码时,出现以下错误。
System.Linq.Dynamic.ParseException was unhandled by user code
Message=No applicable method 'Contains' exists in type 'String'
确定 Id 字段是否包含字符串“15”的语法是什么?
您不能在 LINQ 查询中使用 Contains。相反,你可以试试这个
var people = (from p in personContext.Set<People>()
where p.Id.Contains("15")
orderby p.Id
select p).Skip(0).Take(5).ToList();
我觉得这里有误解...你不应该像这样使用 LINQ。
首先,您需要调用接受 lambda 的重载;然后在 lambda 中指定 属性,如果它是一个字符串,则在其上调用 Contains
。像这样:
var people = personContext
.People
.Where(p => p.Id.Contains("15"))
.OrderByDescending(p => p.Id)
.Skip(0) // You don't need this line.
.Take(5)
.ToList();
EF 本身将完成繁重的工作,并将这些纯 C# 代码转换为正确的 SQL 语句。
What is the syntax for determining if the Id field contains the string "15"?
嗯,绝对不是 .Where("id.Contains(15)")
,它试图用 numeric 值 15 调用方法 Contains
。
根据 documentation,您可以使用 字符串文字:
.Where("id.Contains(\"15\")")
.Where("id.Contains(@0)", "15")