苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4566|回复: 8

[其他] 使用LINQ 实现SELECT A.* FROM A,B WHERE A.GG = B.GG

[复制链接]
发表于 2013-6-21 21:54:54 | 显示全部楼层 |阅读模式
本帖最后由 中国人 于 2013-6-22 10:54 编辑

RT,请教一下关于LINQ的问题,研究一下午,希望指点一下突破。
类似于
是得到的最详尽的答案,有告知LINQ如何写的。例如Datatable1 dt1 和Datatable2 dt2都是内存中数据。栏位dt1.bb 和dt2.bb之间串联。
如果用SQL,我要得到结果就是这样写:SELECT * FROM A, B WHERE A.BB == B.BB。请问怎么使用LINQ写??希望得到解答。
如上搜到的答案中为什么AsEnumerable() 报错为datatable没有该方法。 答案是需要引入System.Data.DataSetExtensions dll.
追踪答案:
编译半天有问题,在回复最后。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-6-22 10:48:10 | 显示全部楼层
自己回复自己把。看来技术不行都没人理睬哦。
结贴。
  1. dtDiffLineNoCommonUse = dasF.Tables[0].Clone();//克隆表结构

  2.                             DataTable dtF = dasF.Tables[0];
  3.                             DataTable dtT = dasT.Tables[0];

  4.                             var query1 = from e2 in dtT.AsEnumerable()
  5.                                          select e2.Field<string>("PART_NO");

  6.                             var query = from e1 in dtF.AsEnumerable()
  7.                                         where !(query1).Contains(e1.Field<string>("RAW_PN"))
  8.                                         //join e2 in dtT.AsEnumerable() on e1.Field<string>("RAW_PN") equals e2.Field<string>("PART_NO")
  9.                                         select e1;

  10.                             foreach (var r in query)
  11.                             {
  12.                                 dtDiffLineNoCommonUse.Rows.Add(r.ItemArray);
  13.                             }
复制代码
 楼主| 发表于 2013-6-21 22:28:56 | 显示全部楼层
刚自己尝试写了下,下班没DB,先发上来供大家无聊看看。
  1. dtDiffLineNoCommonUse = dasF.Tables[0].Clone();//克隆表结构

  2.                             DataTable dtF = dasF.Tables[0];
  3.                             DataTable dtT = dasT.Tables[0];

  4.                             StringBuilder temp = new StringBuilder(" ");
  5.                             foreach (DataRow dr in dtT.Rows)
  6.                             {
  7.                                 temp.Append(dr["PART_NO"].ToString());
  8.                                 temp.Append(",");
  9.                             }
  10.                             temp = temp.Remove(temp.Length - 1, 1);
  11.                             DataRow[] DiffLineRows = dtF.Select("RAW_PN not in (" + temp +")");
  12.                             dtDiffLineNoCommonUse.Rows.Add(DiffLineRows);
复制代码
发表于 2013-6-21 22:49:46 | 显示全部楼层
var str=form c in A join x in B on c.BB equals x.BB
        select c

str
就是你要的结果
 楼主| 发表于 2013-6-21 23:03:19 | 显示全部楼层
qw8613243 发表于 2013-6-21 22:49
var str=form c in A join x in B on c.BB equals x.BB
        select c

可以注释下么,这个  代的有点吃力。
 楼主| 发表于 2013-6-22 09:48:02 | 显示全部楼层
qw8613243 发表于 2013-6-21 22:49
var str=form c in A join x in B on c.BB equals x.BB
        select c

已经实现了功能,谢谢。再次说下 AsEnumerable 方法需要引入System.Data.DataSetExtensions 这个,不然会报错。请问如何用LINQ 实现SELECT A.* FROM AWHERE A.BB NOT IN (SELECT B.BB FROM B)。谢谢您的回答,希望再帮忙一次。
 楼主| 发表于 2013-6-22 10:48:23 | 显示全部楼层
自己回复自己把。看来技术不行都没人理睬哦。
结贴。
  1. dtDiffLineNoCommonUse = dasF.Tables[0].Clone();//克隆表结构

  2.                             DataTable dtF = dasF.Tables[0];
  3.                             DataTable dtT = dasT.Tables[0];

  4.                             var query1 = from e2 in dtT.AsEnumerable()
  5.                                          select e2.Field<string>("PART_NO");

  6.                             var query = from e1 in dtF.AsEnumerable()
  7.                                         where !(query1).Contains(e1.Field<string>("RAW_PN"))
  8.                                         //join e2 in dtT.AsEnumerable() on e1.Field<string>("RAW_PN") equals e2.Field<string>("PART_NO")
  9.                                         select e1;

  10.                             foreach (var r in query)
  11.                             {
  12.                                 dtDiffLineNoCommonUse.Rows.Add(r.ItemArray);
  13.                             }
复制代码
发表于 2013-6-22 11:15:40 | 显示全部楼层
刚在忙。。。你试下:
var str= from c in A  
         from x in B
         where c.BB!=x.BB
         select c
 楼主| 发表于 2013-6-22 19:44:35 | 显示全部楼层
本帖最后由 中国人 于 2013-6-22 19:47 编辑
qw8613243 发表于 2013-6-22 11:15
刚在忙。。。你试下:
var str= from c in A  
         from x in B

var query1 = from e2 in dtT.AsEnumerable()                                          select e2.Field<string>("RAW_PN");                             var query = from e1 in dtF.AsEnumerable()                                         where !(query1).Contains(e1.Field<string>("RAW_PN"))

你看这样行不行?你那样是不是只能比一个值。

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 15:31

© 2014-2021

快速回复 返回顶部 返回列表