簡體   English   中英

LINQ用EndsWith而不是Equals左聯接

[英]LINQ Left Join with EndsWith instead of Equals

我正在嘗試使用不基於相等性而是使用EndsWith的左聯接對實體進行LINQ查詢。 它沒有按預期工作,我想知道我是否做錯了比較。 當我以相等方式進行比較時,它返回結果,但不是我需要的結果,因為由於屬性值,我需要使用EndsWith查看結果。

根據下面的代碼,我應該得到一個看起來像這樣的結果對象:

   X              Y
 BBFile1        File1
 XDDFile2       <Empty>
 File1TTFile3   File3

相反,我只是收到一條錯誤消息,指出“對象引用未設置為對象的實例”。 我搜索過的內容和發現的內容主要指向以下事實:我需要在“選擇”語句中設置默認值以指示返回NULL結果時的操作,但我已經在執行了,而且似乎沒有上班。

這是我的代碼:

List<SFTPFilesListItem> SFTPFullNameList = new List<SFTPFilesListItem>();
        List<ArchiveFileListItem> ArchiveFilesList = new List<ArchiveFileListItem>();

        SFTPFilesListItem file = new SFTPFilesListItem();
        file.FullName = "BBFile1";
        SFTPFullNameList.Add(file);

        SFTPFilesListItem file2 = new SFTPFilesListItem();
        file2.FullName = "XDDFile2";
        SFTPFullNameList.Add(file2);

        SFTPFilesListItem file3 = new SFTPFilesListItem();
        file3.FullName = "File1TTFile3";
        SFTPFullNameList.Add(file3);

        ArchiveFileListItem afile = new ArchiveFileListItem();
        afile.ArchiveFileName = "File3";
        ArchiveFilesList.Add(afile);

        ArchiveFileListItem afile2 = new ArchiveFileListItem();
        afile2.ArchiveFileName = "File1";
        ArchiveFilesList.Add(afile2);

        ArchiveFileListItem afile3 = new ArchiveFileListItem();
        afile3.ArchiveFileName = "File4";
        ArchiveFilesList.Add(afile3);

        var oldfiles = from sftpfile in SFTPFullNameList
                       from archivefile in ArchiveFilesList
                       .Where(x => sftpfile.FullName.EndsWith(x.ArchiveFileName))
                       .DefaultIfEmpty()
                       select new
                       {
                           x = sftpfile.FullName == null ? string.Empty : sftpfile.FullName,
                           y = archivefile.ArchiveFileName == null ? string.Empty : archivefile.ArchiveFileName
                       };

    }

    public class SFTPFilesListItem
    {
        public string FullName { get; set; }
    }

    public class ArchiveFileListItem
    {
        public string ArchiveFileName { get; set; }
    }

除了等於以外,您不對其他任何東西進行“聯接”:生成外部聯接,然后使用WHERE條件選擇所需的行(有趣的是WHERE的選擇方式,而SELECT進行投影,但這就是這種方式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM