【发布时间】:2016-04-07 23:33:17
【问题描述】:
我是 asp.net 的新手,并使用实体框架创建了一个 MVC 项目。大多数情况下它按我的预期工作,但有一个问题,我需要将参数传递给可能是不同类型的方法。我需要这个,因为我不想在每个发送相同结果的类中编写相同的方法。这是我的设置
public class BaseQuery : IOSSQuery
{
private Entities dbcontext;
public BaseQuery() : this(new Entities())
{
}
public BaseQuery(Entities context)
{
this.dbcontext = context;
}
public List<SimpleItem> GetAllItemsFromQuery<T>( T table,Int32 skip)
{
List<SimpleItem> SimpleItemList = new List<SimpleItem>();
SimpleItemList = table.Where(p => p.IsActive == true).OrderBy(p => p.Name).Select(p => new SimpleItem { id = p.Id, Name = p.Name, IsActive = p.IsActive }).Skip(skip).Take(30).Distinct().ToList();
return SimpleItemList;
}
public virtual List<SimpleItem> GetAllItems(Int32 skip)
{
List<SimpleItem> SimpleItemList = new List<SimpleItem>();
return SimpleItemList;
}
}
然后我有一个查询类,
public class ColorQuery : BaseQuery
{
public override List<SimpleItem> GetAllItems(Int32 skip)
{
return GetAllItemsFromQuery( dbcontext.tbl_color, skip)
}
}
界面如下
public interface IOSSQuery : IDisposable
{
List<SimpleItem> GetAllItems(Int32 skip);
}
我想从我的控制器调用方法如下
public JsonResult Color(String range)
{
ColorQuery query = new ColorQuery();
List<string> ranges = range.Split(',').ToList<string>();
var SimplePage = getAllItems(query, Convert.ToInt32(ranges[0]));
return Json(SimplePage, JsonRequestBehavior.AllowGet);
}
public PagedData<SimpleItem> getAllItems( IOSSQuery queryObject, int range )
{
var SimplePage = new PagedData<SimpleItem>();
SimplePage.total = queryObject.TotalItems();
SimplePage.data = queryObject.GetAllItems(range);
return SimplePage;
}
此代码在 BaseQuery 类的这一行抛出错误
public List<SimpleItem> GetAllItemsFromQuery<T>( T table,Int32 skip)
Error CS1061 'T' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)
不知道如何在方法中传递不同的类型。我尝试了Method to accept different types 的解决方案,但没有运气。任何人都可以阐明这一点。谢谢你的时间。
编辑: 这就是它在我的实体中的设置方式
public DbSet<tbl_Category> tbl_Category { get; set; }
public DbSet<tbl_color> tbl_color { get; set; }
编辑 2:
我有多个不同列的表。我的想法是对所有返回相同结果的表使用“BaseQuery”中的通用方法,如果我需要,仍然希望使用“ColorQuery”或对不同的查询说“CategroyQuery”类。
【问题讨论】:
-
为什么在你的类“ColorQuery”中实现“IOSSQuery”,“BaseQuery”已经实现了?
-
哎呀删除了。虽然不能解决问题:)