簡體   English   中英

從 LINQ 查詢的一部分中獲取值並將其添加到結果中

[英]Take value from part of a LINQ query and add it to the result

我比較兩個ObservableCollectionsLayerModel稱為SourceDrawingLayersTargetDrawingLayers

LayerModel具有如下屬性:

public string Path { get; set; }
public string Name { get; set; }
//etc

該程序要求用戶選擇我稱之為TargetDrawings .dwg 文件。 對於每一層,我都會從該文件中捕獲層以及這些層的屬性。 在繪制回報發現每一層LayerModel和性能LayerModel ,如Path Name Color等都是通過查看實際的繪圖文件,我正在讀填充。 所有這些LayerModel都被添加到TargetDrawingLayers

所以TargetDrawingLayers將包含一大堆LayerModel ,在它們上面我使用Path屬性來知道給定圖層存在於哪個實際繪圖文件中。

SourceDrawingLayers通過讀取單個繪圖文件、讀取其中的所有圖層並將它們添加到集合中來填充。

我的期望是每TargetDrawing將包含相同的層用相同的設置SourceDrawing讓我實現這個目標,首先匹配一個名稱LayerModelSourceDrawingLayersLayerModelTargetDrawingLayers

但是,該應用程序的要求之一是我需要在LayerModelSourceDrawingLayersName屬性在SourceDrawingLayersSourceDrawingLayers的任何TargetDrawingLayers

我使用以下查詢完成此操作:

        var missingLayerQuery = SourceDrawingLayers.Where(p => !TargetDrawingLayers.Any(p2 => p2.Name == p.Name));
        ObservableCollection<LayerModel> q = new ObservableCollection<LayerModel>(missingLayerQuery);

結果綁定到一個DataGrid ,在它上面我需要顯示我的查詢完成的缺少的層的名稱,但是因為查詢結果是來自源的LayerModels的集合, LayerModels我的 Path 列只顯示了源繪圖,所以我的結果看起來像這樣:

Drawing Path                    Layer Name
Awesome_Source_Drawing.dwg      MissingLayerName1
Awesome_Source_Drawing.dwg      MissingLayerName2
Awesome_Source_Drawing.dwg      MissingLayerName3

這最終沒有那么有用,因為用戶不知道什么繪圖實際上缺少需要在那里的圖層。 想要的結果是這樣的:

Drawing Path                    Layer Name
Test_Drawing_1.dwg              MissingLayerName1
Test_Drawing_2.dwg              MissingLayerName2
Test_Drawing_3.dwg              MissingLayerName3

我的想法是向我的LayerModel添加一個屬性,稱為public string MissingLayer {get; set;} LayerModel public string MissingLayer {get; set;} public string MissingLayer {get; set;}然后通過查看特定的TargetDrawingLayers LayerModel並以這種方式設置值,找到一種從 LINQ 查詢填充它的方法。

但這就是我被卡住的地方,因為我對 LINQ 還不夠熟悉,無法實現它。 我也不確定是否有更好/更簡單的方法來解決它。 所以我的問題是,我怎樣才能使用這個 LINQ 查詢實現我想要的結果,如果我不能,有什么好的方法來解決它?

謝謝。

如果你只需要名字,你應該只選擇名字;

SourceDrawingLayers.Where( ... ).Select(p => p.Name);

您可能還希望創建層名稱的HashSet<string>以有效處理數千層。

暫無
暫無

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

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