例1:In

SQL:

Select * from dep where DEP_CLASS=3 AND dep_all_code LIKE '" + depAll + "' AND
dep_code in (SELECT DISTINCT DEP3 FROM depview WHERE dep3 in (SELECT dep_code
FROM person_limits WHERE upper(account)='" + UserID + "') )Order By LDAP

LINQ:

 IEnumerable<string> dep_codes = perLimRep.GetMany(p => p.ACCOUNT.ToUpper() == UserID).Select(p => p.DEP_CODE);
IEnumerable<string> DEP2s = depvRep.GetMany(d => dep_codes.Contains(d.DEP3)).Select(d => d.DEP3).Distinct().ToArray();
var query = (from d in depRep.GetMany(d => d.DEP_CLASS == && d.DEP_ALL_CODE.StartsWith(depAll))
select d).OrderBy(d => d.LDAP).ToArray();
var q= (from d in query
where
DEP2s.Contains(d.DEP_CODE)
select d).OrderBy(d => d.LDAP);
var query2 = (from d in depRep.GetMany(d => d.DEP_CLASS == && depAll.StartsWith(d.DEP_ALL_CODE))
where
DEP2s.Contains(d.DEP_CODE)
select d).OrderBy(d => d.LDAP);
var query3 = depRep.GetMany(d=>d.DEP_ALL_CODE.StartsWith(depAll));
DataTable dt_dep3 = q.ToDataTable();

例1.1:复杂的in查询 (涉及到字符串拼接而成的SQL)

SQL:

         string sCommand = string.Format(
" select dep_code, dep_name from ( "
+ " select * from dep where dep_code in ( "
+ " select DISTINCT dep_up from dep where dep_code in ( "
+ " select DISTINCT dep_up from dep where dep_code in "
+ "(select dep_code from person_limits where UPPER(account)='{0}'))) "
+ " UNION all "
+ " select DISTINCT * from dep where dep_code in ( "
+ " select DISTINCT dep_up from dep where dep_code in "
+ " (select dep_code from person_limits where UPPER(account)='{0}')) "
+ " UNION all "
+ " select DISTINCT * from dep where dep_code in "
+ " (select dep_code from person_limits where UPPER(account)='{0}') ) "
+ " where (dep_show = 1) ", sUserAccount);
if (string.IsNullOrEmpty(sDepClass) == false)
{
sDepClass = (int.Parse(sDepClass) + ).ToString();
sCommand += " and (dep_class = " + sDepClass + ")";
}
if (string.IsNullOrEmpty(sDepUp) == false)
sCommand += " and (dep_up = " + sDepUp + ")";
sCommand += " order by dep_code "; DataTable dt1 = dataProviderCenter.ProduceData(sCommand);
if (dt1 != null && dt1.Rows.Count > )
{
foreach (DataRow dRow in dt1.Rows)
sResult += ("" + dRow["dep_code"]).Trim() + "|" +
("" + dRow["dep_name"]).Trim() + ",";
}

LINQ:

 IPERSON_LIMITSRepository presonLimitRep = new PERSON_LIMITSRepository(DatabaseFactory.GetFactory());
IDEPRepository depRep = new DEPRepository(DatabaseFactory.GetFactory()); List<PERSON_LIMITS> listPersonLimit = presonLimitRep.GetMany(p => p.ACCOUNT.ToUpper() == sUserAccount.ToUpper()).ToList();
var deptemp1 =
from d4 in (
(from d2 in
((from d1 in depRep.GetManyByClass_LIST()
from p1 in listPersonLimit
where d1.DEP_CODE == p1.DEP_CODE
select new {DEP_CODE = d1.DEP_UP}).Distinct())
from d3 in depRep.GetManyByClass_LIST()
where d3.DEP_CODE == d2.DEP_CODE
select new {DEP_CODE = d3.DEP_UP}).Distinct()
)
from d5 in depRep.GetManyByClass_LIST()
where d5.DEP_CODE == d4.DEP_CODE
select d5;
var deptemp2 =
(from d2 in
((from d1 in depRep.GetManyByClass_LIST()
from p1 in listPersonLimit
where d1.DEP_CODE == p1.DEP_CODE
select new { DEP_CODE = d1.DEP_UP }).Distinct())
from d3 in depRep.GetManyByClass_LIST()
where d3.DEP_CODE == d2.DEP_CODE
select d3).Distinct();
var deptemp3 =
(from d1 in depRep.GetManyByClass_LIST()
from p1 in listPersonLimit
where d1.DEP_CODE == p1.DEP_CODE
select d1).Distinct(); List<DEP> deptemp = deptemp1.Union(deptemp2).Union(deptemp3)
.Where(d => d.DEP_SHOW == ).ToList();
if (string.IsNullOrEmpty(sDepClass) == false)
deptemp = deptemp.Where(d => d.DEP_CLASS == (decimal.Parse(sDepClass) + )).ToList();
if (string.IsNullOrEmpty(sDepUp) == false)
deptemp = deptemp.Where(d => d.DEP_UP == sDepUp).ToList();
deptemp = deptemp.OrderBy(d => d.DEP_CODE).ToList();

例2:Join

SQL:

SELECT DISTINCT dep1  DEP_CODE,depname1  DEP_NAME FROM DepView join PERSON_LIMITS on dep3=dep_code WHERE upper(account)='{0}' ORDER BY DEP_CODE", account.ToUpper()

LINQ:

 var dvPERSON_LIMITS = PERSON_LIMITS_rep.GetManyAccountLIST(account.ToUpper().Trim()).ToList();
List<string> stPERSON_LIMITS = new List<string>();
for (int i = ; i < dvPERSON_LIMITS.Count; ++i)
{
stPERSON_LIMITS.Add(dvPERSON_LIMITS[i].DEP_CODE);
}
var DEPVIEW_dt = DEPVIEW_rep.GetMany(value => stPERSON_LIMITS.Contains(value.DEP3)).Select(value => new { DEP_CODE = value.DEP1, DEP_NAME = value.DEPNAME1 }).Distinct().OrderBy(value => value.DEP_CODE).ToList();

例3:ORACLE ROWNUM

SQL:

SELECT HTTP_PATH, FILE_NAME ,FILE_NAME_SOURCE FROM"
//+ " ( SELECT * FROM UPLOAD WHERE SER_NO = :SerNo) WHERE ROWNUM <= 1 ORDER BY ROWNUM ASC

上面的这句SQL其实就是:

elect top 1 HTTP_PATH,FILE_NAME,FILE_NAME_SOURCE from UPLOAD where SER_NO='" + xudaxia.Trim() + "'"

LINQ:

第一个需要根据ROWNUM排序,所以Select((x, index) => new { x, index })这句,把index提出来了,原来的结构放在x里面.

第二次的第一个x指的是new { x, index }这个整体,实际的结构是在这个整体中的x里面.

【不能在查询表达式中使用select(t, index)这种表达形式的。】

var result = from u in ((Entities)this.DataContext).UPLOAD.Where(s => s.SER_NO == serno).Where((s, index) => index <= ).Select((s, index) => new { s, index }).OrderBy(s => s.index)
select new { HTTP_PATH = u.s.HTTP_PATH, FILE_NAME = u.s.FILE_NAME, FILE_NAME_SOURCE = u.s.FILE_NAME_SOURCE };

为了避免LINQ不识别以上的方法,故改为:

  var result = from u in ((Entities)this.DataContext).UPLOAD.Where(s => s.SER_NO == serno).Select(s => new { s.HTTP_PATH, s.FILE_NAME, s.FILE_NAME_SOURCE }).Take()
select u;

例4:查询多字段

SQL:

SELECT ID, panel_name, PIC, Review_PIC, Is_Share, Create_ID, Create_Date, Update_Date, Is_Del, Type_Width, Type_Height FROM PANEL_STYLE where Is_Del='' and Is_Share='' and Create_ID <> :UserID ORDER BY Create_ID, Create_Date desc, panel_name

LINQ:

(其实还有一种比较为麻烦的方法,就是先定义一个MOdel Class的类,把属性都COPY都里面。然后在Select new YourClass{xx=u.xx,bb=u.bb...})具体代码不写了,道理都差不多一样)

var result = from p in ((Entities)this.DataContext).PANEL_STYLE.Where(s => s.IS_DEL ==  && s.IS_SHARE ==  && s.CREATE_ID != uid).Select(u => new { u.ID, u.PANEL_NAME, u.PIC, u.REVIEW_PIC, u.IS_SHARE, u.CREATE_ID, u.CREATE_DATE, u.UPDATE_DATE, u.IS_DEL, u.TYPE_WIDTH, u.TYPE_HEIGHT })
orderby p.CREATE_ID, p.CREATE_DATE descending, p.PANEL_NAME
select p;

例5:LINQ做符号运算(多字符串拼接的SQL)

             if (!string.IsNullOrEmpty(sYear)) commYear = " AND ACTION_YEAR='" + sYear.Trim() + "' ";
if (!string.IsNullOrEmpty(sQuarter)) commQuarter = " AND ACTION_QUARTER='" + sQuarter.Trim() + "' ";
if (!string.IsNullOrEmpty(sMonth)) commMonth = " AND ACTION_MONTHS='" + sMonth.Trim() + "' ";
if (!string.IsNullOrEmpty(sWeekY)) commWeekY = " AND ACTION_WEEK_BYYEAR='" + sWeekY.Trim() + "' ";
if (!string.IsNullOrEmpty(sWeekM)) commWeekM = " AND ACTION_WEEK_BYMONTHS='" + sWeekM.Trim() + "' ";
if (!string.IsNullOrEmpty(sDate)) commDate = " AND to_date(Action_Date,'yyyy-mm-dd hh24:mi:ss')=to_date('" + sDate.Trim() + "','yyyy-mm-dd hh24:mi:ss') ";
string strComm = "SELECT (sum(Call_No)-sum(UnCall_No)) SumCallNo ,sum(Process_Time_Total) SumProcessTime ,sum(Wait_Time_Avg*(call_no - uncall_no)) SumWaitTime ,max(Wait_People_Max) MaxWaitPeople ";
strComm += " FROM branch_comparison_bykind WHERE BRANCH_ID='" + sDep.Trim() + "' " + commYear + commQuarter + commMonth + commWeekY + commWeekM + commDate;

LINQ:

  public IQueryable<dynamic> GetDetailInfo(string sdep,decimal sYear,decimal sQuarter,decimal sMonth,decimal sWeekY,decimal sWeekM,string sDate)
{
var bcList=((Entities)this.DataContext).BRANCH_COMPARISON_BYKIND.ToList();
var result = from b in bcList.Where(s => s.BRANCH_ID == sdep && s.ACTION_YEAR == sYear && s.ACTION_QUARTER == sQuarter && s.ACTION_MONTHS == sMonth && s.ACTION_WEEK_BYYEAR == sWeekY && s.ACTION_WEEK_BYMONTHS == sWeekM && s.ACTION_DATE == sDate).Select(b => new { SumCallNo = bcList.Sum(s => s.CALL_NO) - bcList.Sum(s => s.UNCALL_NO), Process_Time_Total = bcList.Sum(s => s.PROCESS_TIME_TOTAL), SumWaitTime = bcList.Sum(s => s.WAIT_TIME_AVG * (s.CALL_NO - s.UNCALL_NO)), MaxWaitPeople = bcList.Max(s => s.WAIT_PEOPLE_MAX) })
select b;
return result as dynamic;
}

LINQ2EF-LINQ2SQL-LINQ笔记的更多相关文章

  1. 简单的Linq笔记

    最近带一个新人,被问到Linq的一点东西,回答他后,自己记录下,防止自己懵逼. Linq中查询一个表中指定的几个字段: var ts = t.FindAllItems().Where(P => ...

  2. 简单Linq笔记

    Linq是.net 3.5才引入的 要引入命名空间System.Linq. Linq  to XML要引入System.Xml.Linq Linq to ADO.NET要引入System.Data.L ...

  3. LINQ笔记

    LINQ概述 语言集成查询(Language intergrated Query,LINQ)在C#编程语言中集成了查询语法. 可以使用相同的语法访问不同的数据源 提供了不同数据源的抽象层,所有可以使用 ...

  4. C#高级编程(第9版) 第11章 LINQ 笔记

    概述语言集成查询(Language Integrated Query, LINQ)在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源.LINQ提供了不同数据源的抽象层,所以可以使用相同的 ...

  5. jQuery DataTables Plugin Meets C#

    Over the weekend, I was doing some work on the internal CMS we use over at eagleenvision.net and I w ...

  6. 《C#本质论》读书笔记(15)使用查询表达式的LINQ

    15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...

  7. linq学习笔记

    最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...

  8. NVelocity学习笔记一——linq2sql+NVelocity完整demo

    (一)前言      刚刚进入新公司,看公司的项目,发现开发流程几乎和以前的完全不同,再看看页面布局竟然没有发现html.神马情况????一番探究发现使用了NVelocity模板引擎开发的.于是乎花了 ...

  9. Dynamic CRM 2013学习笔记(三十)Linq使用报错 A proxy type with the name account has been defined by another assembly

    在CRM中使用linq时,有时会报这个错误: A proxy type with the name account has been defined by another assembly. Curr ...

  10. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

随机推荐

  1. 【Java基础】Java内部类

    什么是内部类 把类定义在其他类的内部,这个类就被称为内部类. 内部类的分类 内部类分为两种,分别为成员内部类和局部内部类: 成员内部类:和成员变量和成员方法定义在同级 局部内部类:和局部变量定义在同级 ...

  2. HDU1542--Atlantis(扫描线)

    给N个矩形的端点坐标,求矩形覆盖面积和. 原理很简单,从左到右扫描,线段树记录的是纵向覆盖的长度.区间更新.因为坐标是实数而且很大,所以需要离散化. WA+RE+CE+MLE+...一共错了二十多次. ...

  3. Yii 图片FTP批量上传 并生成缩略图

    图片批量上传,前台使用 uploadify.swf,这个就不介绍了.这里使用两个扩展,一个是FTP上传的扩展,还有一个是生成缩略图的扩展地址:http://www.yiiframework.com/e ...

  4. The Basics

    “Swift is a new programming language for iOS and OS X app development. Nonetheless, many parts of Sw ...

  5. day1作业

    作业一:博客 作业二:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 作业三:多级菜单 三级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 作业一分析: readme.m ...

  6. centos中MySQL,VmTools安装,使用及异常

    Linux(CentOS)中常用软件安装,使用及异常--MySQL,VmTools 本文主要是为了记录在工作中遇到的常用软件的安装过程,方便以后遇到相同情形时可以快速的查阅.主要讲述了MySQL, V ...

  7. Hibernate拦截器(Interceptor)与事件监听器(Listener)

    拦截器(Intercept):与Struts2的拦截器机制基本一样,都是一个操作穿过一层层拦截器,每穿过一个拦截器就会触发相应拦截器的事件做预处理或善后处理. 监听器(Listener):其实功能与拦 ...

  8. nginx安装php和php-fpm

    最近在学习nginx,看了好多帖子终于安装成功了. 经验,首先不要用yum安装,安装完以后根本找不到安装目录在哪里呀,然后安装失败以后会很不方便. 最终选择了自己编译安装. 看了好多帖子都不行,终于找 ...

  9. Emmet最全提示说明

    前一篇文章简单了说明了Emmet的使用:Emmet相关使用 今天我就将关于subline中Emmet插件的snippets.json文件进行具体说明, 在snippets.json文档中,我们能够看到 ...

  10. [Javascript] Drawing Paths - Curves and Arcs

    window.onload = function() { var canvas = document.getElementById("canvas"), context = can ...