using DevExpress.Dialogs.Core.View; namespace HStation.WinFrmUI { public partial class PumpMatchingCtrl : DevExpress.XtraEditors.XtraUserControl { public PumpMatchingCtrl() { InitializeComponent(); this.gridView1.SetNormalView(30); this.gridView1.OptionsView.ShowDetailButtons = true; this.gridView1.OptionsView.ShowGroupPanel = false; } private List _allBindingList = null; private BLL.PumpMain _pumpMainBll = null; public List SetBindingData(List pumpMatchingViewModel, out List errorList) { _pumpMainBll = new BLL.PumpMain(); errorList = null; _allBindingList = new List(); if (pumpMatchingViewModel == null) return null; var alllist = _pumpMainBll.GetAll().Result; const double speedTolerance = 100; const double flowTolerance = 10; const double headTolerance = 5; const double efficiencyTolerance = 0.05; foreach (var viewModel in pumpMatchingViewModel) { foreach (var pumpMain in alllist) { // 尝试绝对匹配 var absoluteMatch = alllist.FirstOrDefault(item => viewModel.RatedN == item.RatedSpeed && viewModel.RatedQ == item.RatedFlow && viewModel.RatedH == item.RatedHead && viewModel.RatedP == item.RatedPower); if (absoluteMatch != null) { } else { // 尝试区间匹配 var rangeMatch = alllist.Where(item => (viewModel.RatedN.HasValue ? Math.Abs(viewModel.RatedN.Value - item.RatedSpeed) <= speedTolerance : true) && (viewModel.RatedQ.HasValue ? Math.Abs(viewModel.RatedQ.Value - item.RatedFlow) <= flowTolerance : true) && (viewModel.RatedH.HasValue ? Math.Abs(viewModel.RatedH.Value - item.RatedHead) <= headTolerance : true) && (Math.Abs(viewModel.RatedP - item.RatedPower) <= efficiencyTolerance)).ToList(); if (rangeMatch != null) { var vmo = new Vmo.PumpMainVmo(); int firstCount = 0; foreach (var item in rangeMatch) { int commonCount = CountCommonCharacters(viewModel.ModelType, item.Name); if (commonCount > firstCount) { vmo = item; firstCount = commonCount; } } } } } } this.pumpMatchingViewModelBindingSource.DataSource = _allBindingList; return new List(); } private static int CountCommonCharacters(string baseString, string comparisonString) { // 将字符串转换为字符集合 HashSet baseChars = new HashSet(baseString); HashSet comparisonChars = new HashSet(comparisonString); // 计算两个集合的交集 int commonCount = baseChars.Intersect(comparisonChars).Count(); return commonCount; } } }