linq to entity没有外键的多表查询

原创 2011年11月27日 12:39:19


今天某个界面时出现了多表查询(而且表之间没有外键),当然带外键的可能好处理些了,可以参照网上一篇不错的文章

http://www.dotblogs.com.tw/asdtey/archive/2009/10/08/10946.aspx


表之间没有外键:直接看代码吧,你明白的.............

类似的sql 语句如下(主要是查询order表,其中附加有users表和enterprise表信息):

SELECT o.id,o.enterpriseID,o.`code`,o.orderState,o.dueAmount,o.paidAmount,o.remarks,o.needInvoice,o.createdBy,o.createdUserID,o.createdTime,o.auditedUserID,
o.auditedTime,o.lastModifiedUserID,o.lastModifiedTime,e.enterpriseFlag,e.enterpriseName,users.UserName FROM orders o join enterpriseinfos  e on o.enterpriseID=e.enterpriseID JOIN  users  on users.UserID=o.createdUserID WHERE   e.enterpriseFlag='lt' and o.dueAmount='10'
用linq to entity有3中方式(当然这是我尝试之后的,我是个EF的新手,可能还有其他的方法)

  第一种是先查出enterpriseinfos表中的信息在和其他的关联

private List<OrderInfo> QueryOrders(csdbEntities entities, string condition, List<ObjectParameter> paras, string conditionE, List<ObjectParameter> parasE)
        {
            var enList = entities.enterpriseinfos.Where(conditionE, parasE.ToArray());
            var query = (from record in entities.orders.Where(condition, paras.ToArray())                    
                         join data in enList
                         on record.enterpriseID equals data.enterpriseid
                         into datas
                         from e in datas
                         join user in entities.users
                         on record.createdUserID equals user.UserID
                         into userss
                         from u in userss.DefaultIfEmpty()
                         orderby record.code
                         select new OrderInfo
                         {
                            .............
                            
                         }).ToList();  


            return query;
        }       
  第二种是直接在整体预设语句上跟上enterpriseinfos表查询条件

  private List<OrderInfo> QueryOrders(csdbEntities entities, string condition, List<ObjectParameter> paras, string enterpriseFlage, string enterpriseName)
        {
            var query = (from record in entities.orders.Where(condition, paras.ToArray())
                    
                         join data in entities.enterpriseinfos.Where(conditionE, parasE.ToArray())
                         on record.enterpriseID equals data.enterpriseid
                         into datas
                         from e in datas                  
                         join user in entities.users
                         on record.createdUserID equals user.UserID
                         into userss
                         from u in userss.DefaultIfEmpty()
                         orderby record.code
                         select new OrderInfo
                         {
                           ..................
                         }).ToList();  


            return query;
        }       

当然以上两种都是可以在调用时动态组件查询条件的(如参数),这两种的灵活度比较大,缺点是分别要动态组件两种查询条件

  第三种:指定具体的附加查询变量

   private List<OrderInfo> QueryOrders(csdbEntities entities, string condition, List<ObjectParameter> paras, string enterpriseFlage, string enterpriseName)
        {           
            var query = (from record in entities.orders.Where(condition, paras.ToArray())
                         join data in entities.enterpriseinfos//.Where(conditionE, parasE.ToArray())
                         on record.enterpriseID equals data.enterpriseid
                         into datas
                         from e in datas
                         where e.enterpriseFlag.Contains(enterpriseFlage) && e.enterpriseName.Contains(enterpriseName)                    
                         join user in entities.users
                         on record.createdUserID equals user.UserID
                         into userss
                         from u in userss.DefaultIfEmpty()
                         orderby record.code
                         select new OrderInfo
                         {
                         .......................
                         }).ToList();  


            return query;
        }       
但是这种方法不用之前动态组件代码,但是缺点是只能针对比较少的附加条件


这几种方法你可以灵活选择,可能还有其他更好的方法,因为我也是刚接触linq to entity希望大侠们指导啊!


多表联查,两表之间相互关联,不一定需要有主外键关系,字段匹配就行

Set @dlr = 15001; SELECT school.name AS schoolName, xq.xqmc AS xqmc, qy.mc as qymc, ly.bz as lymc...
  • josnow
  • josnow
  • 2017年05月18日 17:53
  • 1664

多表在没有外键下的联合查询

select a.yf as 日期,a.je as 实际销售金额,to_number(b.WHIR$T3232_f8968,'999999999.99') as 预算金额 from (select t...
  • pendy2008
  • pendy2008
  • 2016年05月06日 18:00
  • 698

LINQ to Entities多表查询

LINQ 技术(即 LINQ to Entities)使开发人员能够通过使用 LINQ 表达式和 LINQ 标准查询运算符,直接从开发环境中针对 实体框架对象上下文创建灵活的强类型查询。LINQ to...
  • niewq
  • niewq
  • 2015年01月14日 22:08
  • 10204

Linq to sql查询(单表、多表查询)

关于数据库的查询中经常需要用到多表的连接查询,这里就简单地展示关于linq的查询功能。 1、单表的查询 var query = from tc in db.tbClass where ...
  • lwllai
  • lwllai
  • 2014年12月18日 11:02
  • 5569

Linq To Entity 多表联合查询

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lin...
  • Fanbin168
  • Fanbin168
  • 2014年04月28日 16:19
  • 2234

Python sqlalchemy 多表查询 没有外键

多表查询 没有外键 from sqlalchemy import and_两张表 q = db.session.query(User, UserIn).join(UserIn, and_(User...
  • liuxiaochen123
  • liuxiaochen123
  • 2015年12月08日 15:37
  • 1973

Entity Framework多表多条件动态查询

方式一  Linq To Entity形式: /// /// 查询的数据 /// /// 升序asc(默认)还是降序desc ...
  • zouyujie1127
  • zouyujie1127
  • 2014年05月09日 15:45
  • 30405

我真是受够了没有外键关联的Hibernate多表查询!-- 反射 通过example查询列表

HIbernate 中,没有外键关联,Criteria 不能关联查询!所以就不能findByExample,通过一个条件对象来获取数据。 只能我们自己搞了! AbstractClass: /*...
  • tragedyxd
  • tragedyxd
  • 2016年03月02日 17:28
  • 2396

项目中多表关联查询,没有外键关联

今天项目中碰见多表查询,订单表,商品表(作业更新,商品-门店,每个门店有相同的商品,所有商品重复),门店表,现在要关联查询三个表,根据门店号查出所有商品,订货情况; 我的思路是新建对象,将要展示的数...
  • lijunjie818
  • lijunjie818
  • 2017年07月27日 15:25
  • 228

Linq操作与外键的联系

一个饭局有多个参与者   这是一些基本方法         public class DinnerRepository:IDinnerRepository     {         Ne...
  • woshixuye
  • woshixuye
  • 2012年02月14日 08:49
  • 2278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linq to entity没有外键的多表查询
举报原因:
原因补充:

(最多只允许输入30个字)