我有一个对象列表。我想根据特定属性将此列表拆分为对象列表。任何特定属性值为某个值的对象应该在一个列表中,其余的在另一个列表中。我想使用一个可以实现的LINQ查询。
下面的一些伪代码:
class A {
string X {get; set;}
}
var list = listOfAs;
List<A> listOfAWithXEqualAA;
List<A> listOfAWithXNotEqualAA;
var query = one LINQ query to populate above declared lists.
请建议我这样的查询。
答案 0 :(得分:1)
List<A> FirstList = listofAs.Where(a => a.x == "matchvalue").ToList();
List<A> SecondList = listofAs.Where(a => a.x != "matchvalue").ToList();
答案 1 :(得分:1)
这应该使用所需的值填充您的列表
List<A> listOfAs = new List<A>() ;
string AA = "foo";
List<A> listOfAWithXEqualAA = listOfAs.Where(x => x.X == AA).ToList();
List<A> listOfAWithXNotEqualAA = listOfAs.Where(x => x.X != AA).ToList();
类:
class A
{
public string X { get; set; }
}
答案 2 :(得分:1)
var groups = listOfAs.Select(a=>new {a, IsX = a.X == "AA"}).GroupBy(arg=>arg.IsX);
List<A> listOfAWithXEqualAA = groups.Where (g=>g.Key)
.SelectMany(g=>g.Select(o=>o.a).ToList();
List<A> listOfAWithXNotEqualAA = groups.Where (g=>!g.Key)
.SelectMany(g=>g.Select(o=>o.a).ToList();
这将为您提供两个带有相关信息的IGrouping
。
否则,您可以创建一个列表,然后使用except
获取另一个列表:
List<A> listOfAWithXEqualAA = listofAs.Where (a=>a.X=="AA").ToList();
List<A> listOfAWithXNotEqualAA = listofAs.Except(listOfAWithXEqualAA);
答案 3 :(得分:1)
使用LINQ,你可以使用Select,Where等创建一个IEnumerable。 为什么只使用简单的if:
foreach (var item in list)
{
if (item.X == "AA")
{
listOfAWithXEqualAA.Add(item);
}
else
{
listOfAWithXNotEqualAA.Add(item);
}
}
答案 4 :(得分:-1)
您无法通过单个LINQ实现此目的,但必须编写2个查询
var listOfAWithXEqualAA = listofAs.Where(a => a.X == "AA").ToList();
var listOfAWithXNotEqualAA = listofAs.Where(a => a.X != "AA").ToList();
否则循环遍历列表并使用“if”
将值分配给相应的列表