我撰寫了一個程式,它將根據來自另一個串列的 id 串列過濾資料串列。執行 LINQ 查詢后,我只想要那些將回傳的資料僅與篩選條件中存在的資料匹配。
我的程式是這樣的
public class MarketplacePackageInfo
{
public string PackageId { get; set; }
public string PackageName { get; set; }
public List<AppInfo> Apps { get; set; }
}
public class AppInfo
{
public string AppName { get; set; }
public string AppId { get; set; }
}
List<string>appIds=new List<string>();
appIds.Add("a1");
appIds.Add("a2");
List<MarketplacePackageInfo> packageList = new List<MarketplacePackageInfo>();
MarketplacePackageInfo pacakage1 = new MarketplacePackageInfo();
pacakage1.PackageId = "P1";
pacakage1.PackageId = "Package1";
pacakage1.Apps=new List<AppInfo>();
pacakage1.Apps.Add(new AppInfo { AppId = "a1",AppName="app1" });
pacakage1.Apps.Add(new AppInfo { AppId = "a2", AppName = "app2" });
pacakage1.Apps.Add(new AppInfo { AppId = "a3", AppName = "app3" });
packageList.Add(pacakage1);
MarketplacePackageInfo pacakage2 = new MarketplacePackageInfo();
pacakage2.PackageId = "P2";
pacakage2.PackageId = "Package2";
pacakage2.Apps = new List<AppInfo>();
pacakage2.Apps.Add(new AppInfo { AppId = "a1", AppName = "app1" });
pacakage2.Apps.Add(new AppInfo { AppId = "a2", AppName = "app2" });
packageList.Add(pacakage2);
MarketplacePackageInfo pacakage3 = new MarketplacePackageInfo();
pacakage3.PackageId = "P3";
pacakage3.PackageId = "Package3";
pacakage3.Apps = new List<AppInfo>();
pacakage3.Apps.Add(new AppInfo { AppId = "a2", AppName = "app2" });
pacakage3.Apps.Add(new AppInfo { AppId = "a3", AppName = "app3" });
packageList.Add(pacakage3);
MarketplacePackageInfo pacakage4 = new MarketplacePackageInfo();
pacakage4.PackageId = "P4";
pacakage4.PackageId = "Package4";
pacakage4.Apps = new List<AppInfo>();
pacakage4.Apps.Add(new AppInfo { AppId = "a2", AppName = "app2" });
pacakage4.Apps.Add(new AppInfo { AppId = "a3", AppName = "app3" });
pacakage4.Apps.Add(new AppInfo { AppId = "a4", AppName = "app4" });
packageList.Add(pacakage4);
var filterList= packageList.Where(e => e.Apps.Where(a => !appIds.Contains(a.AppId)).Count() > 0).ToList();
我想要的輸出是我只會得到 package2,因為兩個應用程式都在那里,并且沒有額外的應用程式。但它正在回傳不應出現的 Package1、package 和 package4 的資料。如何撰寫該查詢?
uj5u.com熱心網友回復:
您可以嘗試以下給出相同結果的陳述句:
var filterList = packageList.Where(e => e.Apps.Count(apps => !appIds.Contains(apps.AppId)) == 0).ToList();
或者使用All我認為在可讀性方面更好的
var filterList = packageList.Where(e => e.Apps.All(apps => appIds.Contains(apps.AppId))).ToList();
它們都為您提供包(在這種情況下package2),其中僅包含應用程式,appIds而沒有其他應用程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479523.html
