我一直在尝试为我正在编写的自定义CMS生成多个网站的SiteMap。
我的情况如下:
我在一个名为SiteMapItem
的汇编中有一个类:
public abstract class SiteMapItem
{
public abstract string Url { get; }
}
我在另一个扩展SiteMapItem
的程序集中有三个单独的类:
public class Team : SiteMapItem
{ ... }
public class Partner : SiteMapItem
{ ... }
public class Project : SiteMapItem
{ ... }
在要生成SiteMap的程序集中,我运行以下代码以获取具有IsSubClassOf(typeof(SiteMapItem))
的类型列表:
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
if (a.GetTypes().Any(t => t.IsSubclassOf(typeof(SiteMapItem))))
{
winner = a;
}
}
获得优胜者后,我会获得包含IsSubClassOf
SiteMapItem
的类型列表:
List<Type> types = winner.GetTypes().Where(p => p.IsSubclassOf(typeof(SiteMapItem))).ToList();
然后我迭代types
来运行db.Database.SqlQuery
- 这就是我被困住的地方(db是一个DataContext):
var items = db.Database.SqlQuery(t, "SELECT * FROM @table", new SqlParameter("table", t.Name"));
以上代码什么都不返回,在调试时,每次迭代都正确设置了类型,但是当我检查items
并尝试评估结果时,我收到错误Children could not be evaluated
。
我通常会使用替代方法:
db.Database.SqlQuery<T>("SELECT * FROM @fdsfdsa", ...)
但因为我没有一个类(它在另一个组件中)我不能。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您的代码
var items = db.Database.SqlQuery(t, "SELECT * FROM @table", new SqlParameter("table", t.Name"));
返回DbRawSqlQuery而不是行。
您需要通过
访问items.GetEnumerator