2016-07-07 8 views
0

私は、等価性に基づかず、代わりにEndsWithを使用する左結合を使用するエンティティに対してLINQクエリを実行しようとしています。それは意図したとおりに動作していないと私は誤って比較をしているのだろうかと思っています。私が比較を平等として行うと、結果が返されますが、プロパティ値のためにEndsWithを使用して結果を確認する必要があるため、必要な結果が得られません。私は、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーを取得しLINQは、等しいの代わりにEndsWithと結合しました

代わり
X    Y 
BBFile1  File1 
XDDFile2  <Empty> 
File1TTFile3 File3 

:私は以下の持っているコードに基づいて

、私はこのようになり、結果のオブジェクトを取得する必要があります。私が検索したものと私が見つけたものは、主に、NULL結果が返されたときに何をすべきかを示すために 'Select'ステートメントにデフォルト値を設定する必要があるということを指摘しましたが、働くここで

は、私が持っているコードは次のとおりです。

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; } 
    } 
+1

生成されたSQLを見ましたか?これにより、左ジョインではなくクロスジョインが生成されます。 –

答えて

0

あなたが平等以外に「参加」しません:あなたは外部結合を生成し、WHERE条件(それはだを使用したい行を選択しますどのようにWHEREが選択されているのか、面白いのはSELECTプロジェクトですが、それはその方法です)。

+0

Bruce、私が提供したデータを使って左結合を達成する方法の例を教えてください。 – silverbullettruck2001

関連する問題