我必须列出对象。所以我需要比较这些对象并从" datActualItem"获得满意的列表。到列表。列表" datActualItem"项目可能区分大小写,但列表" datFiltItem"所有项目都是小写字母,我的代码如下。
var datActualItem = (List<UserRoleListViewModel>)TempResult.ToList();
var datFiltItem = ((List<UserRoleListViewModel>)usersDataSource.Data).ToList();
var objnewm = new List<UserRoleListViewModel>();
foreach (var item in datActualItem)
{
objnewm.Add(datActualItem.Where(s => s.Equals(datFiltItem)).FirstOrDefault());
}
注意: - 数组列表项Firstname是&#34; Sajith&#34;其他名单包含&#34; sajith&#34;因此目前没有检查。 我需要在没有区分大小写的情况下进行检查 来自&#34; datActualItem&#34;的添加列表
答案 0 :(得分:4)
要将2个列表与自定义比较策略进行比较,您可以创建一个实现public class MyClassComparer : IEqualityComparer<UserRoleListViewModel>
{
public bool Equals(UserRoleListViewModel x, UserRoleListViewModel y)
{
return x.ID == y.ID
&& x.FirstName.Equals(y.FirstName, StringComparison.CurrentCultureIgnoreCase)
&& x.LastName.Equals(y.LastName, StringComparison.CurrentCultureIgnoreCase);
// continue to add all the properties needed in comparison
}
public int GetHashCode(MyClass obj)
{
StringComparer comparer = StringComparer.CurrentCultureIgnoreCase;
int hash = 17;
hash = hash * 31 + obj.ID.GetHashCode();
hash = hash * 31 + (obj.FirstName == null ? 0 : comparer.GetHashCode(obj.FirstName));
hash = hash * 31 + (obj.LastName == null ? 0 : comparer.GetHashCode(obj.LastName));
// continue all fields
return hash;
}
}
的类:
var list = actual.Except(expected, new MyClassComparer());
用法:
UserRoleListViewModel
另一种方法是覆盖您自己的类Except
的相等性,但这会影响所有内容,而不仅仅是accumarray(a(:,1), a(:,2), [], @min);
方法。
答案 1 :(得分:3)
使用StringComparison.OrdinalIgnoreCase
bool equals = string.Equals("Test", "test", StringComparison.OrdinalIgnoreCase);
如果你需要在Except
方法中使用它,你应该创建实现IEqualityComparer
的类(参见this page)并在该类中使用string.Equals("Test", "test", StringComparison.OrdinalIgnoreCase)
来比较两个复合体对象。 Becasue Linq不知道你根据什么比较数据。
默认情况下,它会检查GetHashCode
和Equals
的结果(为任何对象实现),参考类型的默认实现位于引用本身。