创建一个泛型类以返回一个表
本文关键字:一个 返回 泛型类 创建 | 更新日期: 2023-09-27 18:00:05
我正在尝试创建一个泛型类,在那里我可以传递两个表并返回第一个表。这两个变量是字符串值,用于连接linq查询中的表。我想返回的是一个IQueryable值,但它一直返回一个DataQuery值。
这结束了我的MVC视图中的失败,错误为"方法'System.Reflection.PropertyInfo-GetProperty(System.String)'不支持转换为SQL"
以下代码:
var result = GetTable<Table1, Table2>("Table1id", "Table2id");
public virtual IQueryable<T> GetTable<T, A>(string table1Variable,
string table2Variable)
where T : class
where A : class
{
var table1 = entityDatabaseDC.GetTable<T>();
var table2 = entityDatabaseDC.GetTable<A>();
return from entity in table1.AsQueryable()
join entity2 in table2 on entity.GetType().GetProperty(table1Variable)
equals entity2.GetType().GetProperty(table2Variable)
select entity;
}
它适用于一张桌子:
var result = repository.GetTable<Table1>();
public virtual IQueryable<T> GetTable<T>() where T : class
{
return entityDatabaseDC.GetTable<T>();
}
我想知道我所尝试的是否可行。
也许你应该试试这样的东西:
public virtual IQueryable<T> GetTable<T, A>(string table1Variable,
string table2Variable)
where T : class
where A : class
{
var table1 = entityDatabaseDC.GetTable<T>();
var table2 = entityDatabaseDC.GetTable<A>();
return from entity in table1.AsQueryable()
join entity2 in table2 on
entity.GetType().GetProperty(table1Variable).GetValue(table1,null)
equals
entity2.GetType().GetProperty(table2Variable).GetValue(table2,null)
select entity;
}
注意属性后面的.GetValue(table1,null)
。
问题是linq-to-sql试图将联接表达式(好吧,整个语句)转换为sql。当然,没有办法从SQL语句中执行GetProperty
调用。
所以我担心这永远不会奏效。但也许你可以按照这里的建议来做:如何创建一个动态LINQ连接扩展方法。
感谢您的输入。在深入研究了这个问题之后,我决定退一步,重新开始思考这是否是我试图实现的正确解决方案,以及它是否有益。