关于LINQ多条件组合查询的问题

THE_ROCK 2010-06-10 04:59:54

public IQueryable<Document_ASN_Header> GetDocument_ASN_HeaderByCondition(string ASNNO, string CONSIGNMENTNO, long DOCUMENTTYPE, long OWNERID)
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO)&&p.ConsignmentNo.Contains(CONSIGNMENTNO)
select p;
return query;
}

四个参数我只用到两个,都是string类型的,后面两个long参数我不知道怎么处理,因为在前台调用的时候,很可能两个long参数不会传值,也许传一个,也许两个都传。并且数据库里相对应的这两个long字段,都是有值的。
这种情况下的多条件查询应该怎么做呢?
...全文
684 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小夏天~ 2010-06-19
  • 打赏
  • 举报
回复
这玩意没接触
xieganlin 2010-06-17
  • 打赏
  • 举报
回复
你可以用了解一下。关于linq to sql 动态查询的东西。我用了一下。很不错的。不过第一次用的时候麻烦一点就是。用了第一次,以后就套着用就可以了。我可以提示你一下就是用到.using System.Linq.Expressions;你可以找找这方面的东西。
CHENXINGNIAN 2010-06-16
  • 打赏
  • 举报
回复
这种查询能应用在mysql上面吗,怎么我在我的装饰设计交流论坛上面用这个查询不出来?查询不通用吗?
casoon 2010-06-13
  • 打赏
  • 举报
回复
public IQueryable<Document_ASN_Header> GetDocument_ASN_HeaderByCondition(string ASNNO, string CONSIGNMENTNO, long DOCUMENTTYPE, long OWNERID)
{
var query =this.ObjectContext.Document_ASN_Header.Where(n => n.DocumentNo.Contains(ASNNO) &&p.ConsignmentNo.Contains(CONSIGNMENTNO))
if(DOCUMENTTYPE>0)
{
query=query.Where(n => n.DOCUMENTTYPE=DOCUMENTTYPE)
}
if(OWNERID>0)
{
query=query.Where(n => n.OWNERID=OWNERID)
}

}
Xuon 2010-06-13
  • 打赏
  • 举报
回复
博客园上见过一种完美的方案:http://www.cnblogs.com/coolcode/archive/2009/09/28/IQueryBuilder.html

我以前用过的一种思路:
比如,假如DOCUMENTTYPE参数对应的数据库中的字段是doctype,那么这样判断:
null==DOCUMENTTYPE ? true : DOCUMENTTYPE==doctype




xibo_826 2010-06-13
  • 打赏
  • 举报
回复
支持2楼
q107770540 2010-06-11
  • 打赏
  • 举报
回复

//笨是笨了点,但是能解决你的问题
public IQueryable<Document_ASN_Header> GetDocument_ASN_HeaderByCondition(string ASNNO, string CONSIGNMENTNO, long DOCUMENTTYPE, long OWNERID)
{
if (DOCUMENTTYPE == null && OWNERID == null)
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO) && p.ConsignmentNo.Contains(CONSIGNMENTNO)
select p;
return query;
}
else if (DOCUMENTTYPE == null && OWNERID != null)
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO) && p.ConsignmentNo.Contains(CONSIGNMENTNO)
&& p.OWNERID == OWNERID
select p;
return query;
}
else if (DOCUMENTTYPE != null && OWNERID == null)
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO) && p.ConsignmentNo.Contains(CONSIGNMENTNO)
&& p.DOCUMENTTYPE == DOCUMENTTYPE
select p;
return query;
}
else
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO) && p.ConsignmentNo.Contains(CONSIGNMENTNO)
&& p.OWNERID == OWNERID && p.DOCUMENTTYPE == DOCUMENTTYPE
select p;
return query;
}
}
wuyq11 2010-06-10
  • 打赏
  • 举报
回复
Sunpire 2010-06-10
  • 打赏
  • 举报
回复
开放式并发冲突检查的Sql就是类似这样的。

WHERE ... AND ((A IS NULL) OR (A IS NOT NULL AND A = '某个原始值'))
丰云 2010-06-10
  • 打赏
  • 举报
回复
 public IQueryable<Document_ASN_Header> GetDocument_ASN_HeaderByCondition(string ASNNO, string CONSIGNMENTNO, long DOCUMENTTYPE, long OWNERID)
{
var query = from p in this.ObjectContext.Document_ASN_Header
where p.DocumentNo.Contains(ASNNO)
&& p.ConsignmentNo.Contains(CONSIGNMENTNO)
&& DOCUMENTTYPE == null
|| p.DOCUMENTTYPE == DOCUMENTTYPE
&& OWNERID == null
|| p.OWNERID == OWNERID
select p;
return query;
}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧