社区首页 >问答首页 >LINQ拉链内连接

LINQ拉链内连接
EN

Stack Overflow用户
提问于 2022-02-01 04:32:04
回答 2查看 100关注 0票数 -1

是否有一种以懒散的方式使用LINQ到(内部)连接集合的方法?我所面临的情况是,我需要将级联中的多个CSV关联起来,如果“上游”CSV被证明是空的,我希望避免不必要的解析操作:

代码语言:javascript
代码运行次数:0
复制
ReadCsvRows(fileA).Join(
    ReadCsvRows(fileB), // why to parse B if A is empty?!
    ...
).Join(
    ReadCsvRows(fileC),
    ...
).Join(...)

注意,ReadCsvRows方法位于接口后面,唯一的要求是该方法必须返回IEnumerable (如描述的这里)。为了保持"streamy",我可以通过引入自定义扩展方法来解决这个问题。

代码语言:javascript
代码运行次数:0
复制
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
    this IEnumerable<TOuter> outer, 
    Func<IEnumerable<TInner>> innerFunc, 
    Func<TOuter, TKey> outerKeySelector, 
    Func<TInner, TKey> innerKeySelector, 
    Func<TOuter, TInner, TResult> resultSelector) =>
        !outer.Any() ?
        Array.Empty<TResult>() :
        outer.Join(
            innerFunc(),
            outerKeySelector,
            innerKeySelector,
            resultSelector
        );

但我想知道我有什么选择的香草LINQ。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-01 06:05:26

您不需要自己的Join实现。如果标准System.Linq实现没有记录,则不枚举inner序列。

因此,检查您的ReadCsvRows实现。如果在它的体内使用yield return,就不会出现不必要的读取。

按示意图:

代码语言:javascript
代码运行次数:0
复制
public static IEnumerable<Row> ReadCsvRows(string fileName)
{
   using var reader = new CsvReader(fileName);
   while (reader.ReadNext())
   {
      yield return reader.CurrentRow;
   }
}

在这种情况下,如果第一个序列没有行,即使new CsvReader(fileName)也不会被调用。

票数 1
EN

Stack Overflow用户

发布于 2022-02-01 04:45:05

如果我是您,我会将ReadCsvRows(fileB)和ReadCsvRows(fileC)分割成两个独立的变量。并添加一个" if“条件来确定是否应该执行"ReadCSVRows(fileB)”。

就像这样:

代码语言:javascript
代码运行次数:0
复制
List<FileATypeA> fileAData = ReadCsvRows(fileA);
List<FileATypeB> fileBData = new List<FileATypeB>();
List<FileATypeC> fileCData =  new List<FileTypeC>();

if(fileAData.Count() > 0)
    fileBData = ReadCsvRows(fileB);
if(fileBData.Count() > 0)
    fileCData = ReadCsvRows(fileC);

List<FinalType> final = from a in fileAData
                        join b in fileBData
                             on a.Key = b.Key
                        join c in fileCData
                             on b.Key = c.Key

看看这是否有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70940626

复制
相关文章
Linq中连接主要有组连接、内连接、左外连接、交叉连接四种
Linq中连接主要有组连接、内连接、左外连接、交叉连接四种。各个用法如下。 注:本文内容主要来自《Linq实战》,本例中用到的对象请见文章底部。 1、 组连接 组连接是与分组查询是一样的。即根据分组得到结果。 如下例,根据publisther分组得到结果。 使用组连接的查询语句如下: //使用组连接 var GroupQuery = from publisher in SampleData.Publishers join book in SampleData.Books on publishe
逸鹏
2018/04/10
2.1K0
左连接,右连接,内连接,外连接
这里之前一直没有写,主要原因觉得好多东西比较基础,没想都写,但是后来觉得,学习的话应该是扫盲和汇总的阶段,所以这里也单独写一下
名字是乱打的
2021/12/22
2.2K0
左连接,右连接,内连接,外连接
Mysql 外连接和内连接
假设A和B表进行连接,使用内连接的话。凡是A表和B表能够匹配上的记录查询出来,这就是内连接。 AB两张表没有主副之分,两张表是平等的。 语法
吃猫的鱼Code
2023/02/02
1.8K0
mysql连接查询(左连接,右连接,内连接)
以上就是MySQL 连接查询的资料整理,大家如有疑问可以留言讨论,共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
叫我可儿呀
2019/11/30
11.8K0
mysql连接查询(左连接,右连接,内连接)
Linq查询连接guid与varchar字段
在数据库设计中进场会出现一些通用表,如通用附件表,一般都是通过ForeignTable(关联的表名)和ForeignKey(关联表的主键)与其他表关联。这样的表在数据库中没有外键关系,而且一般ForeignKey的类型是varchar,为了兼容其他表的主键可能不一样。这样在Linq查询的时候就不能直接关联了,如下代码会编译不通过:
用户6362579
2019/09/29
1.3K0
Linq查询连接guid与varchar字段
左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
3.2K0
内连接、左连接、右连接区别
`Aid` int(10) NOT NULL DEFAULT 1 COMMENT '主键' ,
一觉睡到小时候
2019/07/04
1.2K0
内连接、左连接、右连接区别
拉链表详解_拉链表还原统计
2、表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等;
全栈程序员站长
2022/11/02
5130
SQL查询左连接、右连接、内连接[通俗易懂]
1、左连接的定义:是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。
全栈程序员站长
2022/07/22
7.6K0
SQL查询左连接、右连接、内连接[通俗易懂]
什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别
图片与最后一部分来自:https://blog.csdn.net/plg17/article/details/78758593
全栈程序员站长
2022/09/27
9150
什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别
拉链表
4.3.1.8.1.1 拉链表回顾 拉链表就是之前我们讲过的SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段: start_time(表示该条记录的生命周期开始时间——周期快照时的状态) end_time(该条记录的生命周期结束时间)
Maynor
2021/04/09
5290
mysql左连接 右连接 内连接的区别[通俗易懂]
a表 id name b表 id job parent_id
全栈程序员站长
2022/09/05
2.6K0
详解SQL Server连接(内连接、外连接、交叉连接)
在查询多个表时,我们经常会用“连接查询”。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
程序猿小亮
2021/01/28
3.8K0
MySQL 多表查询、连接查询(内连接、外连接)
查询的结果是一个二维表,它是students表和classes表的“乘积”,即students表的每一行与classes表的每一行都两两拼在一起返回
Michael阿明
2020/07/13
3.8K0
MySQL 多表查询、连接查询(内连接、外连接)
Mysql中外连接,内连接,左连接,右连接的区别
可能第一种通过where语句查询,大家都能理解. 但是不知道大家有没有去尝试过理解下面关于内连接与外连接查询方式的区别 ,接下来我们先通过一张图来演示一下连接的整个层级关系:
萌萌哒的瓤瓤
2021/01/13
4.5K0
Mysql中外连接,内连接,左连接,右连接的区别
SQL 内连接,外连接(左外连接、右外连接)
语句:select * from a_table a inner join b_table bon a.a_id = b.b_id;
birdskyws
2018/09/12
11.5K0
SQL 内连接,外连接(左外连接、右外连接)
Mysql—— 内连接、左连接、右连接以及全连接查询
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
全栈程序员站长
2022/08/10
4.3K0
Mysql—— 内连接、左连接、右连接以及全连接查询
MapReduce实现内连接查询
注意:输入路径path[]放在桌面,每台电脑的用户名不同,桌面路径也有所不同,注意自己的路径
静谧星空TEL
2021/04/27
5950
MapReduce实现内连接查询
数据库中内连接、外连接、全连接
转自:http://blog.csdn.net/yilip/article/details/8065840
forrestlin
2022/04/02
4.4K0
MySQL—内连接和外连接区别
以某一个表为主表,进行关联查询,不管能不能关联的上,主表的数据都会保留,关联不上的以NULL显示
全栈程序员站长
2022/09/27
1.2K0

相似问题

读取拉链内的拉链

11

如何实现“内”拉链?

11

Linq嵌套内连接

35

LINQ内连接条件

22

Linq多级内连接

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档