Zināšanu bāze

Nulls LINQ to DataSet

Labdien,

Jau agrāk minēju, ka nodarbojos ar liela projekta atbalstu un tā pilnveidošanu. Parasti viss lielais sākas ar ko mazu. Pirmsākumā projekts tika veidots ar .NET 1.0 iespējām, pakāpeniski migrēts uz .NET 3.5. Rezultātā mantojumā saņēmu tipizētos DataSet. Pilnveidojot kodu būtu nepareizi turpināt izmantot vecos paņēmienus, ja ir pieejami daudz optimālāki, piemēram datu filtrācija izmantojot LINQ. Bet ir momenti par kuriem uzreiz ir jāpadomā. Apskatīsim maksimāli pietuvinātu realitātei piemēru.

Izveidosim vienkāršu datu modeli. Tabula Invoice ar trim kolonām (invoice_guid, amount, paid_date). Kolona paid_date ir neobligāta, tiek aizpildīta rēķina apmaksas brīdī.

dataset_linq_invoice

Uzrakstot nelielu kodu aizpildām tabulu ar datiem (piemērā, tikai vien no ierakstiem būs ar aizpildītu apmaksas datumu).

var ds = new TestDataSet();

for (int i = 0; i < 3; i++)
{
    TestDataSet.InvoiceRow row = ds.Invoice.NewInvoiceRow();

    row.invoice_guid = Guid.NewGuid();
    row.amount = i*10;
    if (i == 0)
    {
        row.paid_date = DateTime.Now;
    }
    ds.Invoice.AddInvoiceRow(row);
}

Lūk, dati mums ir, sākam pildīt noteiktas darbības. Piemēram – sakārtošana. Agrāk varēja uzrakstīt piemēram šādi(atlasam visus datus no tabulas un sakārtojam pēc apmaksas datuma):

ds.Invoice.Select("", "paid_date desc");

Šādi izskatās tā pati darbība izmantojot LINQ

ds.Invoice.OrderByDescending(i => i.paid_date);

Lieta tāda, ja mēs veicam lauka paid_date vērtības iegūšanas izsaukumu un lauka vērtība ir NULL, izpildes laikā tiek izmesta kļūda. Lai kods sāktu korekti strādāt, filtrācijas nosacījumā jāparedz NULL gadījums. Šādi izskatās piemērs, kur tiek ievērots minētais gadījums:

var q = ds.Invoice.OrderByDescending(
    i => (i.Ispaid_dateNull() ? null : (DateTime?)i.paid_date));

Problēmu atrisinājām, bet varētu būt labāk. Iespējamais risinājums, papildināt DataSet, lai Invoice ierakstam parādītos jauns lauks, piemēram – paid_dateLinq.

Piemērs:

public partial class TestDataSet
{
        public partial class InvoiceRow
        {
            public DateTime? paid_dateLinq
            {
                get
                {
                    if (Ispaid_dateNull())
                    {
                        return null;
                    }
                    return paid_date;
                }
            }
        }
    }

Jaunais lauks nodrošinās vērtības atgriešanu, apejot ierobežojumus. Šādi izskatās piemērs, kur tiek ievērots minētais gadījums:

var q = ds.Invoice.OrderByDescending(i => i.paid_dateLinq);

Iespējams ir kāds vel risinājums šai problēmai, par kuru uzreiz neaizdomājos. Labprāt iepazītos ar lasītāju iesūtītiem variantiem. Rakstiet!

Cerams noderēs!


Posted Mar 05 2009, 10:04 AM by andrejs.mamontovs
Filed under: , , ,

Comments

valdis.iljuconoks wrote re: Nulls LINQ to DataSet
on 03-08-2009 1:25

es gan laikam neaizrautos ar jaunu lauku radīšanu, bet gan mēģinātu viedot apkārt čaulu, kas slēpj patiesās implementācijas detaļas. tas savukārt radītu iespēju atteikties no DataSet un pielietot citu tehnoloģiju, neradot izmaias patērētāju kodā.

andrejs.mamontovs wrote re: Nulls LINQ to DataSet
on 03-08-2009 11:36

Valdi, es jau minēju, ka sistēma ir jāuztur un jāpilnveido.  Pats labi zini, dzīvojam grūtajā laikā. Ieskaidro klientam, kāpēc esi patērējis vairāk laika uz tāda veida lietām. Šis ir tikai piemērs pieļaujamam risinājumam.

valdis.iljuconoks wrote re: Nulls LINQ to DataSet
on 03-09-2009 15:15

dzīve ir sūra :)

Bobbo wrote re: Nulls LINQ to DataSet
on 01-24-2012 0:22

That's a subtle way of thinikng about it.

buy google plus wrote re: Nulls LINQ to DataSet
on 03-24-2012 3:07

BGhr0c I really like and appreciate your blog article.Thanks Again. Really Great.

Motivation to lose weight wrote re: Nulls LINQ to DataSet
on 04-08-2012 1:17

Q6UsdZ Muchos Gracias for your blog post.Thanks Again. Really Great.

buy oem software wrote re: Nulls LINQ to DataSet
on 05-03-2012 13:38

VaqjkZ Looking forward to reading more. Great blog.Thanks Again.

amazing services wrote re: Nulls LINQ to DataSet
on 08-07-2012 1:26

mbKGtO Thanks again for the article. Great.

bookmarking service wrote re: Nulls LINQ to DataSet
on 11-06-2012 16:26

1DMBCC I think this is a real great blog article. Fantastic.

Fiverr best selles wrote re: Nulls LINQ to DataSet
on 11-28-2012 2:14

SzXwlk A big thank you for your blog post.Thanks Again. Really Great.

nike requin pas cher wrote re: Nulls LINQ to DataSet
on 12-10-2012 9:23

Prefer is simply fallible with rise, nonetheless matures more substantial as we age if thoroughly federal.

generic viagra wrote re: Nulls LINQ to DataSet
on 01-09-2013 11:03

f3N1ZE Hey, thanks for the blog post.Really looking forward to read more. Fantastic.

archeage gold wrote re: Nulls LINQ to DataSet
on 02-27-2013 14:52

I’m not sure where you are getting your info, but good topic. I needs to spend some time learning much more or understanding more. Thanks for fantastic info I was looking for this info for my mission. archeage gold www.cheap-archeage-gold.com

coachfactoryoutlet33.com wrote re: Nulls LINQ to DataSet
on 04-07-2013 5:30

Even if the person doesn‘d accept you how we would like them that will,doesn‘d require people preceptor‘d accept you effortlessly they already have.

social bookmarking service wrote re: Nulls LINQ to DataSet
on 04-12-2013 15:39

GwYDf9 Very informative blog post.Really thank you! Really Cool.

buy social bookmarks wrote re: Nulls LINQ to DataSet
on 04-16-2013 5:12

1dPAIv A round of applause for your article post.

Add a Comment

(obligāts)  
(brīvizvēles)
(obligāts)  
Remember Me?