有没有什么方法,使用EF框架,可以动态获取想要的字段,多条件查询,而且生成的SQL是最简?
在网上找了以下代码然后照着改了一下,动态获取想要的字段,多条件查询都实现了,但是查询生成的SQL,还是会查询所有字段。不知csdner或者外国的coder有没有解决方法?又或者其他的受众比较广,一直有在支持的ORM架构能实现该想法?EF LINQ ORM C# --------------------编程问答-------------------- 先做一个select再查询
private void MainForm_Load(object sender, EventArgs e)
{
Expression<Func<t_User, bool>> expr = PredicateExtensions.True<t_User>().And(t => t.UserId == "ABC").And(t => t.Password == "123");
var query = GetUser((u) => { return new { u.UserId, u.UserName }; }, expr.Compile());
}
public IEnumerable<TProjection> GetUser<TProjection>(Func<t_User, TProjection> projection, Func<t_User, bool> predicate)
{
var a = from user in se.t_User.Where(predicate) select projection(user);
return a;
}
//老外的一个多条件查询类
public static class PredicateExtensions
{
public static Expression<Func<T, bool>> True<T>() { return f => true; }
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
}
}
或者直接调用sql --------------------编程问答-------------------- 只要你把编译原理看完,把sql所有的token重新实现一边就ok了
额,你确定你真要如此?
兄弟,ORM的职责不是为了让你去做CRUD,ORM最关键的职责是关系转对象,是解决关系和对象的不适配。理解这点你就知道为啥他们都不直接查字段了,因为动态的字段无法对应一个固定对象,除非你打算动态编译一个对象出来。
--------------------编程问答-------------------- 有人说ruby才是做web和orm的人喜欢的东西,我想你会喜欢他滴,动态构建一个实体对ruby这类语言无负担,所以我可以大胆猜一下,ruby下的ORM是你喜欢的东西 --------------------编程问答-------------------- 主要是因为假如查询我写成
var b = from u in se.t_User
where u.UserId == "ABC" && u.Password == "123"
select new { UserId = u.UserId, UserName = u.UserName };
那么生成的查询语句就是类似select UserId,UserName from...的最简语句,以前写查询都是getbyXXX,我就在想又没有一个方法能适应所有查询,于是就搜索了下。
但我也刚接触LINQ,如果思路不对,请指教。 --------------------编程问答-------------------- 其实我也有在寻找其他ORM框架,貌似是ELINQ吧,号称想查啥就查啥,不会有多余的动作,不会查多余的东西。但是我还是希望使用官方的东西,毕竟支持更好些。之前介绍的文章找不到了,汗啊 --------------------编程问答-------------------- 多条件查询用Linq.Dynamic 试试看?
补充:.NET技术 , LINQ