C# 如何在C中比较ViewModel的两个实例的值相等性#
因此,我有一个用于搜索数据库的ViewModel。我打算重构掉结果集集合。我认为它不属于这个视图模型。我只想在用户提交页面时将传递给我的控制器操作的ViewModel与存储在TempData中的ViewModel进行比较。所以我可以判断这是否是相同的研究 那怎么能做到呢?考虑到我的viewModel中有很多属性,我不想逐一比较。在我看来,使用Json.Encode对它们进行序列化并进行比较似乎是“黑客行为” 还有,如果我必须逐一比较的话。应该通过重写C# 如何在C中比较ViewModel的两个实例的值相等性#,c#,asp.net-mvc,C#,Asp.net Mvc,因此,我有一个用于搜索数据库的ViewModel。我打算重构掉结果集集合。我认为它不属于这个视图模型。我只想在用户提交页面时将传递给我的控制器操作的ViewModel与存储在TempData中的ViewModel进行比较。所以我可以判断这是否是相同的研究 那怎么能做到呢?考虑到我的viewModel中有很多属性,我不想逐一比较。在我看来,使用Json.Encode对它们进行序列化并进行比较似乎是“黑客行为” 还有,如果我必须逐一比较的话。应该通过重写.Equals() 控制器操作Search()
.Equals()
控制器操作Search()
ViewModelSearchViewModel
公共类SearchViewModel
{
公共搜索视图模型()
{
Page=1;
BuildingSearch=新建搜索BuildingViewModel();
ParcelSearch=新搜索ParcelViewModel();
SalesSearch=新的SearchSalesViewModel();
PropertyFeatureSearch=新搜索PropertyFeaturesViewModel();
ValuesSearch=新的搜索值viewmodel();
}
///
///获取或设置一个值,该值指示是否使用高级搜索。
///
公共bool UseAdvancedSearch{get;set;}
公共布尔新闻搜索{get;set;}
公共布尔isSameSearch{get;set;}
///
///获取或设置页面。
///
[HiddenInput]
[脚手架立柱(假)]
公共整型页{get;set;}
[HiddenInput]
[脚手架立柱(假)]
公共字符串排序选项{get;set;}
#区域搜索视图模型
///
///获取或设置建筑搜索。
///
公共搜索BuildingViewModelBuildingSearch{get;set;}
///
///获取或设置地块搜索。
///
公共搜索ParcelViewModel ParcelSearch{get;set;}
///
///获取或设置属性功能搜索。
///
公共搜索属性功能查看模型属性功能搜索{get;set;}
///
///获取或设置销售搜索。
///
公共搜索SalesViewModel SalesSearch{get;set;}
///
///获取或设置搜索值。
///
公共搜索值查看模型值搜索{get;set;}
#端区
///
///获取或设置搜索结果。
///
[脚手架立柱(假)]
公共IPagination搜索结果{get;set;}
}
考虑使用它对对象进行深入比较。您甚至可以使用NuGet获取它:在ViewModel中实现IEquatable
,其中T是ViewModel类名,并创建自己的Equals方法逻辑:
public bool Equals(ViewModel other)
{
//compare properties, etc here
}
并重写GetHashCode():
重写.Equals()并使用反射,否则在添加新成员时,您将不得不保持超负荷。我只是有点呕吐。反射很可怕,但有时是需要的。。。它的存在是有原因的,不仅仅是因为EF使用它。你能在回答中给出一个小例子吗?我已经有一段时间没有做过这样的编码了。这真的很有帮助。
public class SearchViewModel
{
public SearchViewModel()
{
Page = 1;
BuildingSearch = new SearchBuildingViewModel();
ParcelSearch = new SearchParcelViewModel();
SalesSearch = new SearchSalesViewModel();
PropertyFeatureSearch = new SearchPropertyFeaturesViewModel();
ValuesSearch = new SearchValuesViewModel();
}
/// <summary>
/// Gets or sets a value indicating whether use advanced search.
/// </summary>
public bool UseAdvancedSearch { get; set; }
public bool NewSearch { get; set; }
public bool isSameSearch { get; set; }
/// <summary>
/// Gets or sets the page.
/// </summary>
[HiddenInput]
[ScaffoldColumn(false)]
public int Page { get; set; }
[HiddenInput]
[ScaffoldColumn(false)]
public string SortOption { get; set; }
#region Search View Models
/// <summary>
/// Gets or sets the building search.
/// </summary>
public SearchBuildingViewModel BuildingSearch { get; set; }
/// <summary>
/// Gets or sets the parcel search.
/// </summary>
public SearchParcelViewModel ParcelSearch { get; set; }
/// <summary>
/// Gets or sets the property feature search.
/// </summary>
public SearchPropertyFeaturesViewModel PropertyFeatureSearch { get; set; }
/// <summary>
/// Gets or sets the sales search.
/// </summary>
public SearchSalesViewModel SalesSearch { get; set; }
/// <summary>
/// Gets or sets the values search.
/// </summary>
public SearchValuesViewModel ValuesSearch { get; set; }
#endregion
/// <summary>
/// Gets or sets the search results.
/// </summary>
[ScaffoldColumn(false)]
public IPagination<ParcelResultItemViewModel> SearchResults { get; set; }
}
public bool Equals(ViewModel other)
{
//compare properties, etc here
}
public override int GetHashCode()
{
//you custom hash code algorithm
}