在我的数据访问层中,我使用以下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;
}
但是收到错误
&#34;无法解析符号Content_type&#34;
我该如何解决这个问题?
答案 0 :(得分:3)
问题是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;
}
但是如果你需要完全通用,你可以像这样为你的函数添加一个选择器:
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;
}
并使用它:
Get(x => x.Content_type);
此外,如果你想更进一步,你可以通过整个条件:
public List<T> Get<T>(Func<T, bool> condition) where T : class
{
var list = Context.Set<T>().Where(condition).Distinct().ToList();
return list;
}
并像这样使用它:
Get(x => x.Content_type == "test");
希望它有所帮助。
答案 1 :(得分:0)
原因是您对T
的所有了解都是class
。您不知道它是否包含Content_type
属性。
如果您始终传递包含T
定义的Content_type
类,请尝试以下操作。
Context.Set<T>().ToList().Distinct().Where(x => (x as SomeClassWithContentTypeField).Content_type == "Test");
更好的方法是引入声明IHasContentTypeField
属性
Content_type
public interface IHasContentTypeField
{
string Content_type { get; set; }
}
然后将T
约束到此接口。
public List<T> Get<T>() where T : IHasContentTypeField
然后,您可以在要为其调用IHasContentTypeField
方法的类中实现Get<T>
。
public class A : IHasContentTypeField
{
public string Content_type { get; set; }
}