咨询EF 的代码如何写成通用的?
请教:按照“不要重复”的理念,如何将如下代码写成通用的代码,也就是 abc 、 abcs 可以更换为其他。
其中 public DBSet<abc> abcs {get; set;}
public List<abc> Query()
{
var datas = from p in db.abcs
orderby p.ID
select p ;
if (datas.Count()>0)
return datas.ToList();
else
return null;
}
mvc EF
[解决办法]
想了下,好人做到底,帮你写一个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Test
{
public int ID { get; set; }
}
class Program
{
static void Main(string[] args)
{
var list = new List<Test>()
{
new Test() { ID = 3 },
new Test() { ID = 2 },
new Test() { ID = 9 },
new Test() { ID = 5 },
new Test() { ID = 7 },
new Test() { ID = 1 }
};
foreach (var item in OrderByID(list.AsQueryable<Test>()))
{
Console.WriteLine(item.ID);
}
}
static List<T> OrderByID<T>(IQueryable<T> datasource)
{
var p = Expression.Parameter(typeof(T), "p");
var bodyexpr = Expression.MakeMemberAccess(p, typeof(T).GetProperty("ID"));
var lambdaexpr = Expression.Lambda(bodyexpr, p) as Expression<Func<T, int>>;
var list = datasource.OrderBy(lambdaexpr).ToList();
return list.Count() == 0 ? null : list;
}
}
}