日期:2014-05-20  浏览次数:21034 次

关于LINQ内连接一个问题?
今天下午搞了半天没有搞出来,麻烦看下问题在哪里!现在有2张表要内连接,公司company,联络人customer,company有一个字段com_xscode,customer有一个字段c_xscode,把两张表联系起来,如com_xscode:G0000-C0001,c_xscode:G0000-C00001-P0001,G0000-C00001-P0002
show_companyDataContext db_company = new show_companyDataContext(); //公司表
show_customerDataContext db_customer = new show_customerDataContext(); //客户表
//1、调试出错,编译没问题,我点击获取SQL语句发生异常,所以下面这句写法有问题,我目的是要获得来两张连接后所有的字段?
var customer_company = from p in db_company.t_company
  orderby p.com_date descending
  join c in db_customer.t_customer
  on p.com_xscode equals c.c_xscode.Substring(0, 11)
  into pc
  from x in pc.DefaultIfEmpty()
  select new { p.com_en_name, p.com_name,x.c_en_name,x.c_name };

  string com_en_name = string.Empty;
  foreach (var name in customer_company) //2、调试出错,提示查询包含对不同数据上下文上所定义项的引用
  {
  com_en_name += name.com_en_name;
  }



------解决方案--------------------
C# code

//亲,从你的代码来看,是左连接,不是内连接啊
var customer_company = from p in db_company.t_company 
  join c in db_customer.t_customer
  on p.com_xscode equals c.c_xscode.Substring(0, 11)
  into pc 
  from x in pc.DefaultIfEmpty()
  orderby p.com_date descending
  select new { 
    com_en_name=p.com_en_name, 
    com_name=p.com_name,
    c_en_name=x==null?"":x.c_en_name,
    c_name=x==null?"":x.c_name 
  };

  string com_en_name = string.Empty;
  foreach (var name in customer_company.DefaultIfEmpty())    {
  com_en_name += name.com_en_name;
  }