【发布时间】:2014-12-03 09:01:48
【问题描述】:
我在我的 ASP.Net Forms 应用程序中创建了一个 Model 类,名为 Years_Of_Service:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace PROJECT.Models.Default
{
public class Years_Of_Service
{
public int Year { get; set; }
public string FiscalYear
{
get
{
return Year + "-" + (Year + 1);
}
}
public decimal ServiceCredited { get; set; }
public decimal Salary { get; set; }
public string CoveredEmployer { get; set; }
public string TotalService { get; set; }
public string PurchasedorReinstatedService { get; set; }
}
}
我已成功查询我的数据库并通过我的自定义控件在此模型类中返回适当的值,但是在某些特定情况下,我返回的记录具有相同的 [Year] 值:
我现在需要做的是遍历列表中的每个实体,如果 2 个或更多实体具有 [Year] 的匹配值,则将它们合并在一起并将 [Covered Employer] 的值更改为“Multiple Employers” .
一个简单的 foreach 循环将带我浏览每个实体,但我不知道如何对每个 OTHER 实体进行子搜索以查找匹配的 [Year] 值并将 2 组合起来。任何人都可以指出我在正确的方向上如何最好地实现这一点?
这是我目前拥有的自定义控件页面代码:
public partial class YearsOfService : System.Web.UI.UserControl
{
public List<Years_Of_Service> lyos { get; set; }
public Years_Of_Service y_o_s { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ApplyData();
}
}
private void ApplyData()
{
foreach (Years_Of_Service yearsOfService in lyos)
{
// Search [lyos] for records with same [Year] value (ex. "2009-2010")
// If found, Add the [Service] & [Salary] Values together under one [Year] record.
// Change the newly "merged" record to say "Multiple Employers" for [CoveredEmployer]
}
salaryGridView.DataSource = lyos;
salaryGridView.DataBind();
if (y_o_s.TotalService.ToString() != null)
{
creditSalLabel.Text = y_o_s.TotalService.ToString();
}
else
{
creditSalLabel.Text = String.Empty;
}
if (y_o_s.PurchasedorReinstatedService.ToString() != null)
{
purchaseCreditLabel.Text = y_o_s.PurchasedorReinstatedService.ToString();
}
else
{
purchaseCreditLabel.Text = String.Empty;
}
}
}
【问题讨论】:
-
深思熟虑:
if (y_o_s.TotalService.ToString() != null)不好。 -
对更好的方法有什么建议(现在和将来)?
-
记住经验法则,当你使用一个方法/属性时,要了解它的实际用法。现在,考虑
ToString(),它总是返回一个字符串。但如果您的对象为空,则该对象 ToString 是一个错误。也就是说,检查if(y_o_s.TotalService != null)是正确的方法。 -
很公平,感谢您的洞察力。我想我最初有这种方式只是因为我试图弄清楚我在哪里/为什么在另一个问题上得到
NullReferenceException。
标签: c# asp.net list search webforms