我正在try 使用LINQ中的两个节目列表中的节目引用字段来连接这两个列表中的节目-列表A中的引用有时可能会在末尾附加"-R",并可能在列表中出现两次(一次带有"-R",另一次没有),而列表B中的引用永远不会有"-R".

在列表A中,如前所述,每条记录有两行,我得到的是"长度不能小于零".错误.以下是我的代码;

例如:

ListA
UG00001-2023
UG00001-2023-R
UG00002-2023
UG00002-2023-R

List B
UG00001-2023
UG00002-2023
var combinedList = from programmeA in ListA join programmeB in ListB on (programmeA?.REFERENCE.Substring(0,programmeA.REFERENCE.IndexOf("-R")) ?? programmeA.REFERENCE) equals programmeB?.REFERENCE ?? string.Empty
select new Programme()
{
...
}

所以,我试图实现的是,如果列表A中的Programme Ref中的一行在引用的末尾附加了"-R",则返回"-R"之前的所有内容,但如果Programme Ref没有附加"-R",则返回引用.

任何帮助都将不胜感激.

推荐答案

您遇到的错误"长度不能小于零"很可能是因为在未找到指定的子字符串时对字符串调用了SubstringIndexOf.为避免此错误并获得所需结果,您可以按如下方式修改LINQ查询:

var combinedList = from programmeA in ListA
    join programmeB in ListB
    on (programmeA.REFERENCE.EndsWith("-R")
        ? programmeA.REFERENCE.Substring(0, programmeA.REFERENCE.Length - 2)
        : programmeA.REFERENCE)
    equals programmeB.REFERENCE
    select new Programme
    {
        // project your properties here
    };

这种方法将处理列表A中的引用可能有也可能没有附加"-R"的情况,并相应地连接它们.

Csharp相关问答推荐

有没有方法让ASP.NET Core模型绑定器使用私有设置器来设置属性?

在Dapper中使用IasyncEum重写GetAsyncEum方法

在C#中使用in修饰符

在. net毛伊岛窗口的深度链接已经创建""

如何循环遍历XML文档 node 以使用XSLT存储值

ASP.NET核心REST API返回一个非常大的数字

C#带主体的主构造函数?

如何使用用于VS代码的.NET Maui扩展在我的iOS/Android设备或模拟器上进行调试?

C#多键字典和TryGetValue

在使用UserManager时,如何包含与其他实体的关系?

Blazor Server.NET 8中的Blazore.FluentValidation问题

Azure Functions v4中的Serilog控制台主题

如何在特定环境中运行dotnet测试?

具有嵌套属性的IGGroup

如何在特定时间间隔运行多个后台任务?

Excel将';@';添加到具有范围的公式中

在C#中删除多个不同名称的会话

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

我应该使用IMhemyCache来存储承载令牌,还是应该为Azure函数中的401个错误实施Polly重试策略?

C#Web服务转换为 node /Express不工作