1

編集:コードが更新されました

次のコードがありますが、機能していません。無限ループを作成し、指定した値を持つ行があるかどうかを確認したい何千もの行を追加します。 .

Servicio.Value == "PAS" の IF ステートメントを使用します。これは、サービスが "PAS" の場合、テーブル Umbrales に modulo_id という列があり (すべてを挿入することが想定されています)、返されるクエリがあるためです。値は Banksphere テーブルではなく PAS テーブルに変更されます...これを処理するためのより良い方法を知っている場合は、これが非常に面倒だと思うので、それも高く評価されます..

        checkcenterDBDataContext dc = new checkcenterDBDataContext();
        int intOkMas = Convert.ToInt32(txtUmbralOkMas.Text);
        int intOkMenos = Convert.ToInt32(txtUmbralOkMenos.Text);
        var days = GetDaysLikeMe(DateTime.Today).Take(50).Where(d => d.Date.Day < 28 && d.Date.Day > 1).Take(4);

        XDocument xDoc = XDocument.Load("Settings.xml");
        var Entidades =
            from ent in xDoc.Root.Elements("Entidad")
            select ent;
        foreach (var entidad in Entidades)
        {
            var Servicios =
                from serv in entidad.Element("Servicios").Elements("ServName")
                select serv;
            foreach (var servicio in Servicios)
            {
                if (servicio.Value == "PAS")
                {
                    Umbrales newUmbral = new Umbrales();
                    var Modulos =
                        from mod in entidad.Element("Servicios").Elements("ModName")
                        select mod;
                    foreach (var modulo in Modulos)
                    {
                        for (int i = 0; i <= 2; i++)
                        {
                            var valores =
                                from b in dc.PAS
                                where
                                b.Modulos.nombre == modulo.Value &&
                                b.Entidades.nombre == entidad.Element("Nombre").Value &&
                                b.peticion_id == i
                                && days.Contains(Convert.ToDateTime(b.fecha))
                                orderby b.id descending
                                select b;

                            var medias =
                                from b in valores
                                group b.valor by new { b.hora_id, b.dia_id, b.entidad_id, b.modulo_id, b.peticion_id } into hg
                                orderby hg.Key.hora_id descending
                                select new
                                {
                                    Hora = hg.Key.hora_id,
                                    Dia = hg.Key.dia_id,
                                    Entidad = hg.Key.entidad_id,
                                    Modulo = hg.Key.modulo_id,
                                    Peticion = hg.Key.peticion_id,
                                    Maximo = Math.Round(System.Convert.ToDouble(hg.Average() + ((hg.Average() * intOkMas) / 100)), 3, MidpointRounding.AwayFromZero),
                                    Minimo = Math.Round(System.Convert.ToDouble(hg.Average() - ((hg.Average() * intOkMenos) / 100)), 3, MidpointRounding.AwayFromZero)
                                };

                            foreach (var med in medias)
                            {
                                var update_medias =
                                    (from um in dc.Umbrales
                                     where
                                     um.hora_id == med.Hora
                                     && um.dia_id == med.Dia
                                     && um.entidad_id == med.Entidad
                                     && um.servicio_id == 3
                                     && um.peticion_id == med.Peticion
                                     && um.modulo_id == med.Modulo
                                     select um).ToList();
                                if (update_medias.Any())
                                {
                                    foreach (var ume in update_medias)
                                    {
                                        ume.maximo = Convert.ToDecimal(med.Maximo);
                                        ume.minimo = Convert.ToDecimal(med.Minimo);
                                        dc.SubmitChanges();
                                    }
                                }
                                else
                                {
                                    newUmbral.hora_id = med.Hora;
                                    newUmbral.dia_id = med.Dia;
                                    newUmbral.entidad_id = med.Entidad;
                                    newUmbral.servicio_id = 3;
                                    newUmbral.peticion_id = med.Peticion;
                                    newUmbral.modulo_id = med.Modulo;
                                    newUmbral.maximo = Convert.ToDecimal(med.Maximo);
                                    newUmbral.minimo = Convert.ToDecimal(med.Minimo);
                                    dc.Umbrales.InsertOnSubmit(newUmbral);
                                    dc.SubmitChanges();
                                }
                            }

                        }
                    }
                }
                else
                {
                    Umbrales newUmbral = new Umbrales();
                    for (int i = 0; i <= 2; i++)
                    {
                        var valores =
                            from b in dc.Banksphere
                            where
                            b.Servicios.nombre == servicio.Value &&
                            b.Entidades.nombre == entidad.Element("Nombre").Value &&
                            b.peticion_id == i
                            && days.Contains(Convert.ToDateTime(b.fecha))
                            orderby b.id descending
                            select b;

                        var medias =
                            from b in valores
                            group b.valor by new { b.hora_id, b.dia_id, b.entidad_id, b.servicio_id, b.peticion_id } into hg
                            orderby hg.Key.hora_id descending
                            select new
                            {
                                Hora = hg.Key.hora_id,
                                Dia = hg.Key.dia_id,
                                Entidad = hg.Key.entidad_id,
                                Servicio = hg.Key.servicio_id,
                                Peticion = hg.Key.peticion_id,
                                Maximo = Math.Round(System.Convert.ToDouble(hg.Average() + ((hg.Average() * intOkMas) / 100)), 3, MidpointRounding.AwayFromZero),
                                Minimo = Math.Round(System.Convert.ToDouble(hg.Average() - ((hg.Average() * intOkMenos) / 100)), 3, MidpointRounding.AwayFromZero)
                            };

                        foreach (var med in medias)
                        {
                            var update_medias =
                                (from um in dc.Umbrales
                                 where
                                 um.hora_id == med.Hora
                                 && um.dia_id == med.Dia
                                 && um.entidad_id == med.Entidad
                                 && um.servicio_id == med.Servicio
                                 && um.peticion_id == med.Peticion
                                 select um).ToList();
                            if (update_medias.Any())
                            {
                                foreach (var ume in update_medias)
                                {
                                    ume.maximo = Convert.ToDecimal(med.Maximo);
                                    ume.minimo = Convert.ToDecimal(med.Minimo);
                                    dc.SubmitChanges();
                                }
                            }
                            else
                            {
                                newUmbral.hora_id = med.Hora;
                                newUmbral.dia_id = med.Dia;
                                newUmbral.entidad_id = med.Entidad;
                                newUmbral.servicio_id = med.Servicio;
                                newUmbral.peticion_id = med.Peticion;
                                newUmbral.maximo = Convert.ToDecimal(med.Maximo);
                                newUmbral.minimo = Convert.ToDecimal(med.Minimo);
                                dc.Umbrales.InsertOnSubmit(newUmbral);
                                dc.SubmitChanges();
                            }
                        }

                    }
                }
            }
        }
4

2 に答える 2

2

update_mediasnull になることはありません。代わりにこれを試してください:

var update_medias = (from um in dc.Umbrales
where
um.hora_id == med.Hora
&& um.dia_id == med.Dia
&& um.entidad_id == med.Entidad
&& um.servicio_id == med.Servicio
&& um.peticion_id == med.Peticion
select um).FirstOrDefault();
于 2012-11-13T22:49:35.710 に答える
1

update_mediasnull になることはありません。常に実行されていないクエリです。次のように変更します。

var update_medias =
    (from um in dc.Umbrales
    where
    um.hora_id == med.Hora
    && um.dia_id == med.Dia
    && um.entidad_id == med.Entidad
    && um.servicio_id == med.Servicio
    && um.peticion_id == med.Peticion
    select um).ToList();

nullチェックの代わりにこれでチェックします

if (update_medias.Any())
于 2012-11-13T22:49:43.147 に答える