我有一个GroupSummary
class
,其中包含以下属性:
public class GroupsSummary
{
public bool UsedRow { get; set; }
public string GroupTin { get; set; }
public string PayToZip_4 { get; set; }
public string PayToName { get; set; }
public string PayToStr1 { get; set; }
public string PayToStr2 { get; set; }
public string PayToCity { get; set; }
public string PayToState { get; set; }
public bool UrgentCare_YN { get; set; }
}
然后我有Dictionary
<string, List<GroupSummary>
对于这些字典项中的每一项,我首先得到其列表中FIRST
项的值,我感兴趣的是:
PayToStr1,PayToStr2,PayToCity,PayToState
现在对于该键列表中的其余项目(所以从第二项开始)我想找到所有组合(只是字符串连接正常)
他们的PayToStr1,PayToStr2,PayToCity,PayToState
与我上面提到的第一项不同。
写这个的好方法是什么?我可以做for-each loop
并解决它,但我希望有更好的LINQ
方法来做到这一点。
答案 0 :(得分:2)
List<GroupsSummary> items = new List<GroupsSummary>();
var first = items.First();
var others = from i in items.Skip(1)
where i.PayToStr1 != first.PayToStr1 ||
i.PayToStr2 != first.PayToStr2 ||
....
select i;
或者你可以在GroupsSummary中定义一个方法,并在where子句中使用它:
public bool IsDifferentFrom(GroupsSummary other)
{
return PayToStr1 != other.PayToStr1 ||
PayToStr2 != other.PayToStr2 ||
....;
}
var others = from i in items.Skip(1)
where i.IsDifferentFrom(first)
select i;
答案 1 :(得分:1)
您可以尝试这样的事情:
List<GroupSummary> result = dictionary[key].Skip(1)
.Where(x=>(x.PayToStr1+
x.PayToStr2+
x.PayToCity+
x.PayToState)!=
(dictionary[key][0].PayToStr1+
dictionary[key][0].PayToStr2+
dictionary[key][0].PayToCity+
dictionary[key][0].PayToState))
.ToList();
答案 2 :(得分:1)
您的问题:
查找列表中与列表中第一项不同的项目。
这是一个简单的整数列表的解决方案:
var items = new List<int> {1, 2, 3, 1, 7, 4, 6, 1, 9};
var query = items
.Skip(1)
.Distinct()
.Where(x => x != items.First())
.OrderBy(x => x);
foreach (int item in query)
{
Console.WriteLine(item);
}
预期输出:
2
3
4
6
7
9
可以轻松扩展此查询以使用GroupsSummary
类。只需定义一个实例方法(如果你不拥有GroupsSummary
类,则定义一个扩展方法)来检查&#34;等价&#34;两个GroupsSummary
个对象:
public bool IsEquivalentTo(GroupsSummary other)
{
return
this.PayToStr1.Equals(other.PayToStr1) &&
this.PayToStr2.Equals(other.PayToStr2) &&
this.PayToCity.Equals(other.PayToCity) &&
this.PayToState.Equals(other.PayToState);
}
上面LINQ查询中的Where
约束变为:
.Where(x => !x.IsEquivalentTo(items.First())