比如:
string sql="select * from table where 1=1 and name='jack'";
if(id==0)
sql=sql+" and id !=-1";
else
sql=sql+" and id in(1,2,3)";if(keyword!=null)
{
string [] list=keyword.split(' ');
for(int i=0;i<list.length;i++)
{
sql=sql+" and keyword like '%'"+list[i]+"'%'";
}
}
如果上面的语句用linq to entity 实现 ,应该怎么写呢?
string sql="select * from table where 1=1 and name='jack'";
if(id==0)
sql=sql+" and id !=-1";
else
sql=sql+" and id in(1,2,3)";if(keyword!=null)
{
string [] list=keyword.split(' ');
for(int i=0;i<list.length;i++)
{
sql=sql+" and keyword like '%'"+list[i]+"'%'";
}
}
如果上面的语句用linq to entity 实现 ,应该怎么写呢?
解决方案 »
- 一个很简单的问题
- DropDownList控件绑定数据库,如何去除重复项?
- 一个WEB网站。引用了System.Core.dll。using System.Linq出错。
- 为什么呢?VS自带的IIS访问有缓存时间/截止期限,发布出系统的IIS就没了?
- Forms验证怎样在webconfig中指定两个错误后跳转的地址
- 我在asp.net中,有一个下拉列表的visible要经常为true和false,我想自定义一个事件,当它发生转变时,如何写呀?
- 简单问题:怎么让页面LOAD的时候让焦点默认在我设置的控件
- 点击按钮保存label的数据
- treeView控件使用TreeNodeSrc属性设置xml文件,但不支持中文,怎么办?
- 现在很多邮件服务器要身份验证,ASP.NET(C#)的SMTPMAIL类有设置身份验证和密码的属性吗?
- 无论是SQL语句,还是HTML的换行,我都试了,都以失败告终
- asp.net读取文件总是乱码,求读取文件的方法,就是把文件的内容读出来
{
str += " and " + kvp.Key +"="+ kvp.Value;
}
dc.ExecuteQuery<表名>(str);
还有
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);
} 我看网友上网有这么写的,但是我添加后会报“LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”。”;这个有办法解决吗?再次感谢。
if(id==0)
sql=sql+" and id !=-1";
else
sql=sql+" and id in(1,2,3)";
========
var query=from t in table
where t.name=='jack'
select t;
if(id==0)
query=query.Where(t=>t.id !=-1);
else
query=query.Where(t=>new int[]{1,2,3}.Contains(t.id));
{
string [] list=keyword.split(' ');
for(int i=0;i<list.length;i++)
{
sql=sql+" and keyword like '%'"+list[i]+"'%'";
}
}
========
if(keyword!=null)
{
string [] list=keyword.split(' ');
foreach(string str in keyword.split(' '))
{
query=query.Where(t=>t.keyword.Contains(str);
}
}
你可以调试查看它们最终翻译成的SQL语句
你就明白了什么叫"延迟查询"了
using(var db=new MyDataEntities()){
var q=db.MyTable.Where(t=>t.l==1&&t.name=="jack");
if(id==0)
q=q.Where(t=>t.id!=-1)
else
q=q.Where(t=>new[]{1,2,3}.Contains(t.id));
return q.ToList();
}这其实就是用了楼上说的延迟查询的特性