我无法想象这一个。为了简单起见,我将解释我正在尝试做什么。
目前,我正在开发一个使用存储库模式的nHibernate项目。数据库内部是一堆包含“描述”字段的表。现在,我正在尝试本地化这些表以使用通用的“资源”表。
所以,我有这两个表:
表1 - 资源: ResourceId,LanguageId,Value
表2 - LinkLabels: LinkLabelId,Description,ResourceId
然后有一个会话令牌,其中包含“LanguageId”,这是用户的首选语言。
好的,说到这里,我需要做的是从ResourcesTable获取“Value”,其中来自LinkLabels的ResourceId =来自Resources的ResourceId,用于具有“ResourceId”的对象。但我必须使用Generic类型。
这是我到目前为止所做的:
public IQueryable<T> ToQueryable<T>()
{
try
{
PropertyInfo resourceProperty = typeof(T).GetProperty("ResourceKey");
if (resourceProperty != null)
{
// Somthing like this, but of course this won't work
// because x.ResourceId doesn't exist because of generic, and the select
// statement is invalue.
//
// return from x in this.session.Query<T>()
// join p in this.session.Query<Resource>() on x.ResourceId equals p.ResourceId
// where p.LanguageId = 1 // this will be from a session object, hardcoded to 1 for now
// select x where x.Description is p.value;
}
else
{
return this.session.Query<T>();
}
}
catch (Exception ex)
{
throw ex;
}
}
答案 0 :(得分:1)
创建一个这样的界面:
interface IResource { int ResourceId {get;组;} }
然后使用约束:
public IQueryable ToQueryable()其中T:IResource { ... }
然后你必须使所有类型都实现IResource。