因为查询条件不固定的原因,sql式的linq查询没法动态拼接条件。

网上搜的资料整理之后终于解决。

参考资料:

enum使用 http://blog.csdn.net/slowlifes/article/details/7799444

linq动态查询 http://msdn.microsoft.com/zh-cn/subscriptions/dd470085.aspx

lambda join使用 http://blog.csdn.net/lai_gb/article/details/4491843

  1.        string whereParams = GetWhereParams(SolutionGroup, CapabilityType);
  2.  
  3. var query = crm.new_usercapabilitynew_usercapabilities.Where(uc => uc.new_user == SystemUserId).
  4. Join(
  5. crm.new_capabilitynew_capabilities,
  6. uc => uc.new_capabilityid,
  7. c => c.new_capabilityid,
  8. (uc, c) => new
  9. {
  10. uc,
  11. c
  12. }
  13. ).Where(o => o.c.new_name.Contains(Capability)).Where(whereParams)
  14. .OrderBy(o => o.uc.new_capabilityidLabel)
  15. .Select(o => new
  16. {
  17. new_capabilityid = o.uc.new_capabilityid,
  18. new_usercapabilityid = o.uc.new_usercapabilityid,
  19. new_capabilityidLabel = o.uc.new_capabilityidLabel,
  20. new_developmentarea = o.uc.new_developmentarea,
  21. new_rating = o.uc.new_rating
  22. });
  1.      public string GetWhereParams(string SolutionGroup, string CapabilityType)
  2. {
  3. var enumgroup = Enum.GetNames(typeof(Xrm.new_capability.NewSolutiongroup)).Where(e => e.ToLower().Contains(SolutionGroup.ToLower())).ToList();
  4. string groupLinqStr = "";
  5. if (enumgroup.Count > )
  6. {
  7. groupLinqStr += "(";
  8. for (int i = ; i < enumgroup.Count; i++)
  9. {
  10. Xrm.new_capability.NewSolutiongroup enumitem = (Xrm.new_capability.NewSolutiongroup)Enum.Parse(typeof(Xrm.new_capability.NewSolutiongroup), enumgroup[i]);
  11. groupLinqStr += "c.new_solutiongroup = " + ((int)enumitem).ToString();
  12. if (i != enumgroup.Count - )
  13. {
  14. groupLinqStr += " or ";
  15. }
  16. }
  17. groupLinqStr += ")";
  18. }
  19. else if (!string.IsNullOrEmpty(SolutionGroup))
  20. {
  21. groupLinqStr += "c.new_solutiongroup = 0";
  22. }
  23.  
  24. var enumtype = Enum.GetNames(typeof(Xrm.new_capability.NewCapabilitytype)).Where(e => e.ToLower().Contains(CapabilityType.ToLower())).ToList();
  25. if (enumtype.Count > )
  26. {
  27. if (groupLinqStr.Length > ) groupLinqStr += " and ";
  28. groupLinqStr += "(";
  29. for (int i = ; i < enumtype.Count; i++)
  30. {
  31. Xrm.new_capability.NewCapabilitytype enumitem = (Xrm.new_capability.NewCapabilitytype)Enum.Parse(typeof(Xrm.new_capability.NewCapabilitytype), enumtype[i]);
  32. groupLinqStr += "c.new_capabilitytype = " + ((int)enumitem).ToString();
  33. if (i != enumtype.Count - )
  34. {
  35. groupLinqStr += " or ";
  36. }
  37. }
  38. groupLinqStr += ")";
  39. }
  40. else if (!string.IsNullOrEmpty(CapabilityType))
  41. {
  42. if (groupLinqStr.Length > ) groupLinqStr += " and ";
  43. groupLinqStr += "c.new_capabilitytype = 0";
  44. }
  45. return groupLinqStr;
  46. }

linq里lambda写的join查询,并附加动态拼接的条件,条件为enum类型的查询的更多相关文章

  1. SqlServer存储过程应用二:分页查询数据并动态拼接where条件

    前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...

  2. .NetCore 使用 Linq 动态拼接Expression表达式条件来实现 对EF、EF Core 扩展查询排序操作

    相信在使用EF的时候对查询条件或者排序上的处理令人心烦,下面我们就来动态拼接表达式解决这一问题 当我们在查询中使用Where的时候可以看到如下参数 下面我们就来扩展 Expression<Fun ...

  3. 使用mybatis提供的各种标签方法实现动态拼接Sql。使用foreach标签实现遍历查询。比如实现select * from user where id in(1,10,24)这条sql查询语句。

    向sql传递数组或List,mybatis使用foreach解析,如下: 需求: 传入多个id查询用户信息,用下边的sql实现: select * from user where id in(1,10 ...

  4. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

  5. sql 、linq、lambda 查询语句的区别

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  6. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  7. linq与lambda 常用查询语句写法对比

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  8. Linq基础+Lambda表达式对数据库的增删改及简单查询

    一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...

  9. LINQ to SQL语句之Join和Order By

    Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), SelectM ...

随机推荐

  1. java 线程状态图

  2. mui(手机)

    官网:http://dev.dcloud.net.cn/mui/

  3. Spring MVC之@RequestBody, @ResponseBody 详解(转)

    简介: @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对 ...

  4. mysql的子查询in()操作及按指定顺序显示

    代码示例: in(逗号分隔开的值列表) 释:是否存在于值列表中 --------------------- 示例: select * from test where id in(3,1,5) orde ...

  5. iOS之UIKeyboardType 11种键盘图片展示

    UIKeyboardTypeDefault      UIKeyboardTypeASCIICapable  ==  UIKeyboardTypeAlphabet      UIKeyboardTyp ...

  6. flask笔记(二)

    Flask中的路由 查看整个flask中的路由映射关系 app.url_map from flask import Flask app = Flask(__name__) @app.route(&qu ...

  7. <CPP学习>第一天 第一个CPP程序 hello word

    由于我是计算机类嵌入式专业的大一学生,之前一直使用的是生万物的C语言,了解了其过程性语言的特性及其基础语法,在大一下学期期末阶段想自学一下C++,其实在开学初就买了一本C++ Primer,但由于各种 ...

  8. 转载:Spring使用p名称空间配置属性

    这篇博客简明扼要地介绍了Spring中p命名空间的使用,笔者在此转载一下. 原文链接:https://blog.csdn.net/liaomin416100569/article/details/49 ...

  9. 今天看到的一篇文章:一位资深程序员大牛给予Java初学者的学习路线建议

    一位资深程序员大牛给予Java初学者的学习路线建议 持续学习!

  10. 汇编:将指定的内存中连续N个字节填写成指定的内容

    1.loop指令实现 ;=============================== ;循环程序设计 ;将制定内存中连续count个字节填写成指定内容(te) ;loop指令实现 DATAS SEG ...