私は2つのList<FileInfo>
リストを持っています、SourceFiles
そしてDestFiles
。Source
ファイル名が含まれているが含まれていないアイテムのリストDest
、つまり左結合を返すLINQクエリを作成したいと思います。
私のデータセットSourceFiles
は次のとおりです。
folder1\a.txt
folder1\b.txt
folder1\c.txt
folder1\d.txt
DestFiles
は:
folder2\a.txt
folder2\b.txt
folder2\c.txt
したがって、クエリはを返す必要があります folder1\d.txt
。
MSDNの例に従って、LINQ構文を使用してみました。
var queryX = from s in SourceFiles
join d in DestFiles
on s.Name equals d.Name
into SourceJoinDest
from joinRow in SourceJoinDest.DefaultIfEmpty()
select new
{
joinRow.FullName
};
および拡張メソッドの使用:
var query = SourceFiles.GroupJoin(DestFiles,
source => source.Name,
dest => dest.Name,
(source,dest) => new
{
path = source.FullName
}).Select(x => x.path.DefaultIfEmpty())
しかし、これらのいずれも機能しません。LINQ構文バージョンは戻りObject reference not sent to an instance of an object
、拡張バージョンは戻りますEnumeration yielded no results.
これらのクエリはFullName
プロパティのセットのみを返し、完全なFileInfo
オブジェクトは返さないことに気付きました。FullName
それぞれを取得してを返すコードがFileInfo
あり、クエリ内の各アイテムに対してこれを実行してリストを再構築します。FileInfo
しかし、クエリから直接返す方法があれば、それは素晴らしいことです。