C#List的join查询
有时需要用两个List做join查询,可以这样做
using System;
using System.Collections.Generic;
using System.Linq;namespace SystemInfoCheck
{public class Program{public static void Main(string[] args){//两个List进行join查询,然后根据条件进行进一步筛选,筛选中符合条件的A列表string bId = "1";//查询和Bid="1"关联的A列表List<A> list1 = new List<A>();list1.Add(new A { Id = "1" });list1.Add(new A { Id = "2" });list1.Add(new A { Id = "3" });list1.Add(new A { Id = "4" });List<BToA> list2 = new List<BToA>();list2.Add(new BToA { Id = "X1", AId = "1", BId = "1" });list2.Add(new BToA { Id = "X2", AId = "2", BId = "1" });list2.Add(new BToA { Id = "X3", AId = "3", BId = "2" });list2.Add(new BToA { Id = "X4", AId = "4", BId = "2" });List<A> result = (from a in list1join btoa in list2 on a.Id equals btoa.AIdwhere btoa.BId == bIdselect a).ToList();if (result != null && result.Count > 0){result.ForEach(item =>{ Console.WriteLine("AId="+item.Id);});}Console.ReadLine();}public class A{public string Id { get; set; }}public class BToA{public string Id { get; set; }public string AId { get; set; }public string BId { get; set; }}}
}
另外如果两个List都很大的情况,我个人非常不建议用join,还是老老实实多查几遍更快一些,像是这样:
using System;
using System.Collections.Generic;
using System.Linq;namespace SystemInfoCheck
{public class Program{public static void Main(string[] args){//两个List进行join查询,然后根据条件进行进一步筛选,筛选中符合条件的A列表string bId = "1";//查询和Bid="1"关联的A列表List<A> list1 = new List<A>();list1.Add(new A { Id = "1" });list1.Add(new A { Id = "2" });list1.Add(new A { Id = "3" });list1.Add(new A { Id = "4" });List<BToA> list2 = new List<BToA>();list2.Add(new BToA { Id = "X1", AId = "1", BId = "1" });list2.Add(new BToA { Id = "X2", AId = "2", BId = "1" });list2.Add(new BToA { Id = "X3", AId = "3", BId = "2" });list2.Add(new BToA { Id = "X4", AId = "4", BId = "2" });List<string> aIds = list2.Where(btoa => btoa.BId == bId).Select(b => b.AId).ToList();List<A> result = null;if (aIds != null && aIds.Count() > 0){result = list1.Where(a => aIds.Contains(a.Id)).ToList();}if (result != null && result.Count > 0){result.ForEach(item =>{ Console.WriteLine("AId="+item.Id);});}Console.ReadLine();}public class A{public string Id { get; set; }}public class BToA{public string Id { get; set; }public string AId { get; set; }public string BId { get; set; }}}
}