Linq表达式where子句具有泛型类型

muk*_*146 0 linq generics lambda types where

在我的数据访问层中,我使用以下Lambda表达式调用GET方法:

public List<T> Get<T>() where T : class { var list = Context.Set<T>().ToList().Distinct().Where(x => x.Content_type == "Test"); return list; }

但是出现错误

“无法解析符号Content_type”

我该如何解决这个问题?

Flo*_*loc 5

问题在于这Content_type不是T类的一部分,因为它只是一个类。

正如@tchelidze所说,您可以在函数上设置where子句以指定类型,例如:

public List<T> Get<T>() where T : IYourCommonInterface
{
    var list = Context.Set<T>().Where(x => x.Content_type == "Test").Distinct().ToList();
    return list;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要完全通用,则可以向函数添加选择器,如下所示:

public List<T> Get<T>(Func<T, object> selector) where T : class
{
    var list = Context.Set<T>().Where(x => selector(x) == "Test").Distinct().ToList();
    return list;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Get(x => x.Content_type);
Run Code Online (Sandbox Code Playgroud)

另外,如果您想走得更远,可以通过整个条件:

public List<T> Get<T>(Func<T, bool> condition) where T : class
{
    var list = Context.Set<T>().Where(condition).Distinct().ToList();
    return list;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Get(x => x.Content_type == "test");
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。