Linq to sharepoint的引入的确给我们操作Sharepoint带来了便利,首先就体现在对Sharepoint 的查询优势上。它基本可以照搬Linq to SQL的查询语法,这就大大保护了你的学习成本,当然,它们之间有某些差异(如:在List间的Left Outer Join等处)
  在实践本处的知识点前,首先需要搭建我们的测试环境。这里我们仍旧引入Northwind数据库的数据表:Customers,Orders,Order Details和Products。我们要用到它们是因为我们要利用它里面的数据快速创建出我们Sharepoint网站的List内容(我们要在Sharepoint网站上创建出4个CustomerLists: ACustomer,AOrders,AOrderDetails和AProducts)。
  如何搭建此环境,请参照

Sharepoint学习笔记---SPList--使用Linq to Sharepoint间接查询External List(1.通过BCS创建External List)

Sharepoint学习笔记---SPList--使用Linq to Sharepoint间接查询External List(2.复制External List内容)

Sharepoint学习笔记---SPList--使用Linq to Sharepoint间接查询External List(3.使用Linq to Sharepoint查询List内容)
  当然你也可以想其它办法创建相应的Sharepoint List环境(eg:通过Excel表导入),总之,此处不再赘述如何搭建学习环境。
  我们创建好的List如下

下面分别列举查询语法:
  首先,在程序顶部我们定义了四个Entity变量并给它们赋值,即从Sharepoint网站的相应List中取出List的内容赋值给对应的Entity Classes

EntityList<ACustomerItem> MyCustomers;
        EntityList<AOrdersItem> MyOrders;
        EntityList<AOrderDetailsItem> MyOrderDetails;
        EntityList<AProductsItem> MyProducts;
       var dc = new NorthWindEntityDataContext(SPContext.Current.Web.Url);
        MyCustomers = dc.GetList<ACustomerItem>("ACustomer");
        MyOrders = dc.GetList<AOrdersItem>("AOrders");
        MyOrderDetails = dc.GetList<AOrderDetailsItem>("AOrderDetails");
        MyProducts = dc.GetList<AProductsItem>("AProducts");

接下来就是使用上面的 MyCustomers,MyOrders,MyOrderDetails,MyProducts进行各种查询。

1.ACustomer中所有的CustomerID(Distinct查询)

View Code

var distinctCustomers = (from dcustom in MyCustomers select dcustom.BCSFindCustomerID).Distinct();

2.查询所有有定单的Customer

View Code

var query = from c in MyCustomers
             where (from o in MyOrders
                                   select o.BCSFindCustomerID).Contains(c.BCSFindCustomerID)
                            select c;

3.查询所有没有定单的Customer

View Code

var query = from c in MyCustomers
            where !(from o in MyOrders
                                select o.BCSFindCustomerID).Contains(c.BCSFindCustomerID)
                        select new
                        {
                            CopanyName = c.BCSFindCompanyName,
                            ContanctName = c.BCSFindContactName,
                            Address = new
                            {
                                Country = c.BCSFindCountry,
                                City = c.BCSFindCity,
                                PostalCode = c.BCSFindPostalCode
                            }

};

4.判断Customer的Country是否属于欧洲国家

View Code

var query = from c in MyCustomers
              select new
                        {
                            CustomerName = c.BCSFindContactName,
                            Country = c.BCSFindCountry,
                            IsEuropeCountry = new string[] { "Belgium", "Denmark", "Finland", "France", "Germany", "Ireland", "Italy", "Norway", "Poland", "Portugal", "Spain", "Sweden", "Switzerland", "UK" }.Contains(c.BCSFindCountry) ? "Yes" : "No"
                        };

5.按Customer的Country是否属于欧洲国家进行分组(Group),并统计每组包含的Customer数目

View Code

var query = from c in MyCustomers
             group c by new { IsEuropeCountry = new string[] { "Belgium", "Denmark", "Finland", "France", "Germany", "Ireland", "Italy", "Norway", "Poland", "Portugal", "Spain", "Sweden", "Switzerland", "UK" }.Contains(c.BCSFindCountry) ? "Yes" : "No" } into g
                        select new
                        {
                            CountryAmount = g.Count(),
                            IsEuropeCountry = g.Key.IsEuropeCountry
                        };

6.按Customer的不同Country进行分组,并显示每个分组的Customer

View Code

var query = from c in MyCustomers
             join g in query.ToList() on c.BCSFindCountry equals g.Country
                         orderby g.Country descending
                         select new
                         {
                             g.Country,
                             g.CustomerNumbers,
                             c.BCSFindContactName
                         };

7.显示含有5个以上Customer的Country

View Code

var query = from c in MyCustomers
             group c by c.BCSFindCountry into g
                        where g.Count() > 5
                        orderby g.Count() descending
                        select new
                        {
                            Country = g.Key,
                            CustomerNumbers = g.Count()
                        };

8.按Customer的Country与City进行分组(Group)

View Code

var query = from c in MyCustomers
            group c by new { c.BCSFindCity, c.BCSFindCountry } into g
                        orderby g.Key.BCSFindCountry, g.Key.BCSFindCity
                        select new
                        {
                            Country = g.Key.BCSFindCountry,
                            City = g.Key.BCSFindCity
                        };

9.对Customer进行分页,并提取第二页的Customer(Skip, Take)

View Code

var query = (from c in MyCustomers
             select c).Skip(10).Take(10);

10.提取Country包含字母"A",ContactName以"A"开头的Customer (UnionJoin)

View Code

var query = (from c in MyCustomers.ToList()
              where c.BCSFindCity.Contains("A")
                         select c).Union
                           (from c in MyCustomers
                            where c.BCSFindContactName.StartsWith("A")
                            select c).OrderBy(c => c.BCSFindContactName).OrderBy(c => c.BCSFindContactName);

11.提取Country包含字母"A",ContactName以"A"开头的Customer (ConcatJoin)

View Code

var query = (from c in MyCustomers.ToList()
              where c.BCSFindCity.Contains("A")
                         select c).Concat
                          (from c in MyCustomers
                           where c.BCSFindContactName.StartsWith("A")
                           select c).OrderBy(c => c.BCSFindContactName).OrderBy(c => c.BCSFindContactName);

12.提取Country包含字母"A",ContactName以"A"开头的Customer (InterSectJoin)

View Code

var query = (from c in MyCustomers.ToList()
              where c.BCSFindCity.Contains("A")
                         select c).Intersect
                          (from c in MyCustomers
                           where c.BCSFindContactName.StartsWith("A")
                           select c).OrderBy(c => c.BCSFindContactName).OrderBy(c => c.BCSFindContactName);

13.提取Country包含字母"A",ContactName以"A"开头的Customer (ExceptJoin)

View Code

var query = (from c in MyCustomers
               where c.BCSFindCity.Contains("A")
                         select c).Except
                          (from c in MyCustomers
                           where c.BCSFindContactName.StartsWith("A")
                           select c).OrderBy(c => c.BCSFindContactName).OrderBy(c => c.BCSFindContactName);

14.显示有Order的Customer及他的Orders(Join)

View Code

var query = from c in MyCustomers.ToList()
            join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                        select new
                        {
                            c.BCSFindCustomerID,
                            c.BCSFindCompanyName,
                            c.BCSFindContactName,
                            c.BCSFindCountry,
                            c.BCSFindCity,
                            o.BCSFindOrderID,
                            o.BCSFindEmployeeID,
                            o.BCSFindShipCity,
                            o.BCSFindShipCountry,
                            o.BCSFindShipVia,
                            o.BCSFindRequiredDate
                        };

15.显示Customer及他的Orders(LeftJoin)

View Code

var query = from c in MyCustomers.ToList()
             join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                        into leftjoin
                        from fnresult in leftjoin.DefaultIfEmpty()
                        select fnresult;

16.显示Order数大于5的Customer

View Code

var query = (from c in MyCustomers.ToList()
              join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                         where (from o1 in MyOrders
                                group o1 by o1.BCSFindCustomerID into g
                                where g.Count() > 5
                                select g.Key).Contains(c.BCSFindCustomerID)
                         select new
                         {
                             c.BCSFindCustomerID,
                             c.BCSFindContactName,
                             o.BCSFindOrderID
                         }).OrderBy(c => c.BCSFindContactName);

17.获取指定用户"ALFKI"的Order

View Code

var query = from c in MyCustomers.ToList()
            join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                        where c.BCSFindCustomerID == "ALFKI"
                        select new
                        {
                            c.BCSFindCustomerID,
                            c.BCSFindCompanyName,
                            c.BCSFindContactName,
                            c.BCSFindCountry,
                            c.BCSFindCity,
                            o.BCSFindOrderID,
                            o.BCSFindEmployeeID,
                            o.BCSFindShipCity,
                            o.BCSFindShipCountry,
                            o.BCSFindShipVia,
                            o.BCSFindRequiredDate
                        };

18.获取指定用户"ALFKI"的Order,并计算每个Order的总金额BCSFindUnitPrice * BCSFindQuantity

View Code

var query = from c in MyCustomers.ToList()
             join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                        join cd in MyOrderDetails on o.BCSFindOrderID equals cd.BCSFindOrderID
                        where c.BCSFindCustomerID == CustomerIDstr
                        select new
                        {
                            c.BCSFindCustomerID,
                            c.BCSFindCompanyName,
                            c.BCSFindContactName,
                            c.BCSFindCountry,
                            c.BCSFindCity,
                            o.BCSFindOrderID,
                            o.BCSFindEmployeeID,
                            o.BCSFindShipCity,
                            o.BCSFindShipCountry,
                            o.BCSFindShipVia,
                            o.BCSFindRequiredDate,
                            cd.BCSFindProductID,
                            cd.BCSFindQuantity,
                            cd.BCSFindDiscount,
                            cd.BCSFindUnitPrice,
                            TotalCost = cd.BCSFindUnitPrice * cd.BCSFindQuantity
                        };

19.获取指定用户"ALFKI"所Order的产品的有关信息(3 tables)

View Code

var query1 = from c in MyCustomers.ToList()
             join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                         join cd in MyOrderDetails on o.BCSFindOrderID equals cd.BCSFindOrderID
                         join p in MyProducts on cd.BCSFindProductID equals p.BCSFindProductID
                         where c.BCSFindCustomerID == "ALFKI"
                         select new
                         {
                             c.BCSFindCustomerID,
                             o.BCSFindOrderID,
                             p.BCSFindProductName,
                             cd.BCSFindQuantity,
                             c.BCSFindCompanyName,
                             c.BCSFindContactName,
                             c.BCSFindCountry,
                             c.BCSFindCity,
                             o.BCSFindEmployeeID,
                             o.BCSFindShipCity,
                             o.BCSFindShipCountry,
                             o.BCSFindShipVia,
                             o.BCSFindRequiredDate,
                             cd.BCSFindProductID,
                             cd.BCSFindDiscount,
                             cd.BCSFindUnitPrice,
                             p.BCSFindSupplierID
                         };

20.获取Order了产品"CHAI"的用户

View Code

var query = from c in MyCustomers
             where (from c1 in MyCustomers.ToList()
                               join o in MyOrders on c1.BCSFindCustomerID equals o.BCSFindCustomerID
                               join cd in MyOrderDetails on o.BCSFindOrderID equals cd.BCSFindOrderID
                               join p in MyProducts on cd.BCSFindProductID equals p.BCSFindProductID
                               where p.BCSFindProductName == "Chai"
                               select c1.BCSFindCustomerID).Contains(c.BCSFindCustomerID)
                        select c;

21.获取Order了产品"CHAI"的用户以及他们所Order的产品"CHAI"的OrderDetails

View Code

var query = from c in MyCustomers.ToList()
            join o in MyOrders on c.BCSFindCustomerID equals o.BCSFindCustomerID
                        join cd in MyOrderDetails on o.BCSFindOrderID equals cd.BCSFindOrderID
                        join p in MyProducts on cd.BCSFindProductID equals p.BCSFindProductID
                        where (from c1 in MyCustomers.ToList()
                               join o1 in MyOrders on c1.BCSFindCustomerID equals o1.BCSFindCustomerID
                               join cd1 in MyOrderDetails on o1.BCSFindOrderID equals cd1.BCSFindOrderID
                               join p1 in MyProducts on cd1.BCSFindProductID equals p1.BCSFindProductID
                               where p1.BCSFindProductName == "Chai"
                               select c1.BCSFindCustomerID).Contains(c.BCSFindCustomerID)
                               &&
                               p.BCSFindProductName == "Chai"
                        select new
                        {
                            customerName = c.BCSFindContactName,
                            ProductName = p.BCSFindProductName,
                            UnitPrice = cd.BCSFindUnitPrice,
                            Quantity = cd.BCSFindQuantity,
                            SellTotal = cd.BCSFindUnitPrice * cd.BCSFindQuantity

};

转载于:https://www.cnblogs.com/wsdj-ITtech/archive/2011/11/03/2232530.html

Sharepoint学习笔记---Linq to Sharepoint--查询语法相关推荐

  1. Sharepoint学习笔记 –架构系列—Sharepoint的客户端对象模型(Client Object Model)

    前面过了一下Sharepoint的服务器端对象模型,接下来就让我们大致看看Sharepoint的客户端对象模型(Client Object Model: Client OM). 首先需要了解的就是Sh ...

  2. Sharepoint学习笔记---如何找到SharePoint List的Template ID

    我们可以利用Visual Studio2010结合owssvr.dll来找到我们指定的Sharepoint List所使用的Template的ID值.   OWSSVR.DLL实际上是一个在IIS中注 ...

  3. Sharepoint学习笔记—架构系列

     为便于查阅,这里整理并列出了我的Sharepoint学习笔记中涉及架构方面的有关文章,有些内容可能会在以后更新. Sharepoin学习笔记-架构系列--  Sharepoint的网页(Page), ...

  4. Sharepoint学习笔记—ECMAScript对象模型系列-- 7、获取和修改List的Lookup字段

    在前面我们提到了如何使用ECMAscript对象模型来操作普通的List Items,但如果我们操作的List包含有Lookup字段,那么我们又该怎么做呢? 首先参考此文搭建我们本文的测试环境 Sha ...

  5. Sharepoint学习笔记---Sandbox Solution-- Full Trust Proxy--开发实例之(2、在Webpart中访问Full Trust Proxy)...

    上一篇Sharepoint学习笔记---Sandbox Solution-- Full Trust Proxy--开发实例之(1.创建一个能访问DataBase的Full Trust Proxy), ...

  6. Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type

    Sharepoint本身就是一个丰富的大容器,里面存储的所有信息我们可以称其为"内容(Content)",为了便于管理这些Conent,按照人类的正常逻辑就必然想到的是对此进行&q ...

  7. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...

    在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint ...

  8. Sharepoint学习笔记—Ribbon系列

     为便于查阅,这里整理并列出了我的Sharepoint学习笔记中涉及Ribbon开发的关文章,有些内容可能会在以后更新. Sharepoint学习笔记-Ribbon系列-- 1. Ribbon的架构 ...

  9. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

最新文章

  1. keras 的 example 文件 babi_rnn.py 解析
  2. ScheduledThreadPoolExecutor的相关知识
  3. CTFshow php特性 web136
  4. MySQL-05:pymysql与pycharm设置
  5. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)
  6. 小米POCO X3开启预热:支持33W闪充5160mAh大电池65分钟搞定
  7. thincmf 分页无法搜索_分页的bug ThinkCMF内容管理框架,做最简约的ThinkPHP开源软件...
  8. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
  9. css实现垂直居中(+水平居中)
  10. python 有限域函数库_有限域(4)——程序实现有限域的运算
  11. unity3d烘焙教程 持续更新中【2020】
  12. Laya位图字体制作
  13. 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
  14. java里的if语句怎么写_Java中的if怎么用?
  15. Android仿微信语音聊天
  16. windows查看密码工具
  17. Android 返回键
  18. 数据挖掘中的数据预处理方法总结
  19. 怎么给图片名称快速重命名?来跟我学着两个实用方法
  20. Zookeeper同步机制!!!

热门文章

  1. springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解
  2. UE4学习-材质快捷键及材质帮助手册
  3. mysql myisam 去掉表锁a_MyISAM表锁的解决方案
  4. python绘制立体扇形_Python实现PS滤镜特效之扇形变换效果示例
  5. python里的符号区别_Python中的方括号和点符号有什么区别?
  6. mysql $gt_mysql变量(用户+系统)
  7. centos 显示50g硬盘但是 实际大小很小_天啦噜!知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍...
  8. 频率响应函数与数字滤波实验_WKD3419振动测试与控制教学实验系统
  9. html获取文本框中的文字,JavaScript实现input输入框点击获取文字内容
  10. 定时器和promise_分析 Promise 内部实现