有时需要用两个List做join查询,可以这样做
cs
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 list1
join btoa in list2 on a.Id equals btoa.AId
where btoa.BId == bId
select 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,还是老老实实多查几遍更快一些,像是这样:
cs
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; }
}
}
}