我有大约3个班级,Author
,Book
& Library
。我有以下函数,它使用泛型来查询数据库中的所有记录:
public static System.ComponentModel.BindingList<T> getRecordsOfType<T>() where T : class, IEntity
{
var records = session.Query.All<T>();
return new System.ComponentModel.BindingList<T>(records.ToList<T>());
}
这很好用,现在我的后续函数应该使用其Id:
获取一条记录public static System.ComponentModel.BindingList<T> getRecordOfTypeById<T>(int intId) where T : class, IEntity
{
var record = session.Query.All<T>().Where(p => p.Id == intId);
return new System.ComponentModel.BindingList<T>(record.ToList<T>());
}
这里C#不知道p将具有属性Id(我的所有类都将使用此函数)因为我正在使用泛型。
当然,我可以遍历库,书和作者,并为每个编写不同的查询,但如果我想扩展,我将在此函数中编写额外的代码。
这可以使用Linq解决,还是我需要解决这个问题?
答案 0 :(得分:2)
IEntity应该包含名为Id的属性,它可以工作,或者你可以为其他人创建IHaveId接口。
public static System.ComponentModel.BindingList<T>
getRecordOfTypeById<T>(int intId) where T : class, IEntity, IHaveId
和界面如:
public interface IHaveId
{
int Id { get; set;}
}
此方法中使用的所有实体都应实现IHaveId
接口
如果您执行上述所有操作,则可确保p
具有Id
,并且您将能够在通用方法中使用它。