私は、等価性に基づかず、代わりに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; }
}
生成されたSQLを見ましたか?これにより、左ジョインではなくクロスジョインが生成されます。 –