gpt4 book ai didi

c# - 比如使用动态 lambda 表达式搜索日期时间字段

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:36 24 4
gpt4 key购买 nike

我正在形成如下所示的字符串表达式。

     string Condition = " it.person_id = " + personId.ToString();

if (lstPersonFields != null)
{
foreach (var field in lstPersonFields )
{
string fieldCondition = " And it." + field.FieldName.ToString();
if (field.FieldCondition == "Contains")
{
fieldCondition = fieldCondition + " Like '%" + field.FieldValue.ToString() + "%'";
}
else if (field.FieldCondition == "Equals")
{
fieldCondition = fieldCondition + " = '" + field.FieldValue.ToString()+"'";
}
Condition = Condition + fieldCondition;
}
}
var personSearch = FullPersonlst.Where(Condition).ToList();

上面的代码对于 like 搜索中的 datetime 值以外的值可以正常工作,并且对于 datetime 字段会抛出错误,例如

Like arguments must be of string type 

如何搜索日期时间字段?

最佳答案

将其作为动态 lambda 表达式来执行将类似于:

var arg = Expression.Parameter(typeof(Person), "it");
var body = Expression.Equal(
Expression.PropertyOrField(arg, "PersonId"),
Expression.Constant(personId));

if (lstPersonFields != null)
{
foreach (var field in lstPersonFields)
{
var member = Expression.PropertyOrField(arg, field.FieldName);
switch (field.FieldCondition)
{
case "Contains":
body = Expression.AndAlso(body,
Expression.Call(typeof(SqlMethods), "Like", null,
member,
Expression.Constant("%" + field.FieldValue + "%")));
break;
case "Equals":
body = Expression.AndAlso(body,
Expression.Equal(
member,
Expression.Constant(field.FieldValue)));
break;
}
}
}
var lambda = Expression.Lambda<Func<Person,bool>>(body, arg);
var personSearch = FullPersonlst.Where(lambda).ToList();

关于c# - 比如使用动态 lambda 表达式搜索日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com