首页 > 解决方案 > 在自定义对象上添加包含方法以使用 LINQ

问题描述

我有一个类,其属性包含 json 格式的序列化数据:

public class MyObject
{
    public string SerializedData 
    {
        get
        {
            ...
        }
        set
        {
            ...
        }
    }
}

该对象是实体框架数据库对象的属性:

public class MyRecord
{        
    public int Id { get; set; }

    public MyObject Item { get; set; }
}

我现在正在尝试编写一个 LINQ 语句来检查序列化字符串是否包含我的搜索文本。我正在动态构建 LINQ 语句:

var predicate = PredicateBuilder.New<TEntity>();
var param = Expression.Parameter(typeof(TEntity), typeof(TEntity).Name);
Expression property = Expression.Property(param, type.Name);

Expression contains = Expression.Call(
            property, "Contains",
            null,
            new[] { Expression.Constant("test") });

        predicate.Or(Expression.Lambda<Func<TEntity, bool>>(contains, param));

我的对象不包含“包含”方法,所以我添加了一个:

public class MyObject
{
    ...
    public bool Contains(string value)
    {
        return true;
    }
}

当我的查询运行时,我收到以下错误:

LINQ to Entities 无法识别“Boolean Contains(System.String)”方法,并且该方法无法转换为存储表达式。

我不确定我是否以正确的方式处理这个问题?

有人可以帮忙吗?

谢谢

标签: linqjson.netentity-framework-6linq-expressionsexpressionbuilder

解决方案


推荐阅读