0

只是对下面的代码很困惑。

我有像下面这样的课

public class Counter
{       
    public Double NormalCounter { get; set; }
    public Double SATCounter { get; set; }
    public Double SUNCounter { get; set; }
   
}

在我的主课中,我有方法做一些计算来填充计数器

Counter CountHrs = GetBookedHours(resourceBkg, PrevEvent);
var lstExpResult = new List<string> {CountHrs.NormalCounter.ToString(),
                                     CountHrs.SATCounter.ToString(), 
                                     CountHrs.SUNCounter.ToString()};
UpdateBooking(bookingSesid, lstExpResult);

假设我在计数器中有如下值

正常计数器 =4

SAT计数器=10

SUN计数器=6

我正在尝试添加到字符串列表并更新数据库。这是正确的方法吗?或我有任何其他选择。

我的更新预订方法如下所示,以提供清晰的思路。

 public static bool UpdateBooking(string BookingSesid,List<string>HoursByRate)
    {
         SchedwinEntities db = new SchedwinEntities();
         string value = string.Empty;
         for (int i = 0; i < 5; i++)
         {
             string str = " ";
             if (i < HoursByRate.Count())
             {
                 str = HoursByRate[i];
                 value += str + ((char)13).ToString() + ((char)10).ToString();
             }
         }
            var query = 
            from SEVTs in db.SEVTs
            where
            SEVTs.SESID.Trim() == BookingSesid//SESID
            select SEVTs;
        foreach (var SEVTs in query)
        {
            SEVTs.USER3 = value;//value
        }
        try
        {
            db.SaveChanges();
            return true;
        }
        catch (UpdateException ex)
        {
            return false;
        }
    }
4

2 回答 2

3

与其传递代表 s 的字符串列表,不如传递一个double键值对列表,从中构造参数化语句,并使用键值对列表绑定参数值,如下所示:

class SqlParamBinding {
    string Name {get;set;}
    object Value {get;set;} 
}
var lstExpResult = new List<SqlParamBinding> {
    new SqlParamBinding { Name = "NormalCounter", Value = CountHrs.NormalCounter}
,   new SqlParamBinding { Name = "SATCounter", Value = CountHrs.SATCounter}
,   new SqlParamBinding { Name = "SUNCounter", Value = CountHrs.SUNCounter}
};
UpdateBooking(bookingSesid, lstExpResult);

现在lstExpResult将名称与值分开,您的UpdateBooking代码可以将 SQL 表达式格式化为

WHERE NormalCounter=@NormalCounter AND SATCounter=@SATCounter AND ...

然后将@NormalCounter@SATCounter和绑定@SUNCounter到列表中传递的值lstExpResult

于 2013-03-22T00:39:50.243 回答
0

如果要列出 Counter 类,则使用 List 而不是 List。看起来您可能有一堆可能正在更新或发送到数据库的 Counter 对象。

    Counter c = new Counter();
    c. NormalCounter = 4
    c.SATCounter = 10
    c.SunCounter = 10

    List<Counter> listCounter = new List<Counter>
    listCounter.Add(c);

代码更具可维护性和可读性。

如果您一次发送一个对象,则根本不需要列表。您可以将计数器对象传递给您的 UpdateMethod 并在更新数据库时对其进行解析。

于 2013-03-22T00:46:38.783 回答