Náhrada operátoru LIKE v LINQ   otázka

VB.NET, LINQ

Zdravím.

VB2008

Na webu jsem se dočetl, že operátor LIKE z SQL lze nahradit metodou Contains. V jednoduchých příkladech mi to fungovalo, pak jsem ale napsal tohle:

Dim souborB As XElement = XElement.Load("cenik.xml")
Dim partnos = _
        From partno In souborB.Descendants("StoItem") _
        Where (partno.Attribute("PartNo").Value.Contains("HLEDANYRETEZEC")) _
        Select Kod = partno.Attribute("Code").Value

a tam mi to hlásí chybu, že

Odkaz na objekt není nastaven na instanci objektu.

a taky

Obecný typ Iterator`1 byl použit s nesprávným počtem obecných argumentů v sestavení System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.

Tak já nevím. Kód

Dim souborB As XElement = XElement.Load("cenik.xml")
Dim partnos = _
        From partno In souborB.Descendants("StoItem") _
        Where (partno.Attribute("PartNo") = "HLEDANYRETEZEC") _
        Select Kod = partno.Attribute("Code").Value

samozřejmě funguje, ale musí dojít k celkové shodě mezi porovnávanými hodnotami, tzn. není možné tímto způsobem vyhledat jen podle části hledaného řetezce, protože to nic nevrátí.

Pokud mi někdo poradí, jak to tedy obejít, budu rád. Popř. mohu poslat kousek toho XML souboru pro zorientování.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, protože jsem na problém popsaný nahoře nepřišel, vrátil jsem se k řešení, že hledám celý řetězec:

Private Sub PodlePartno_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PodlePartno.Click
        Dim souborB As XElement
        Dim partnos As System.Collections.Generic.IEnumerable(Of String)
        Dim JenomPartNo As String = PodlePartno.Text.Split("@")(0)

        souborB = XElement.Load(CestaKSouborum & "SWS_cenik.xml")
        partnos = _
        From partno In souborB.Descendants("StoItem") _
        Where (partno.Attribute("PartNo") = JenomPartNo) _
        Select Kod = partno.Attribute("Code").Value
        SWSNavrhPodlePartno.Text = partnos.ElementAt(0)

        souborB = XElement.Load(CestaKSouborum & "ABA_cenik.xml")
        partnos = _
        From partno In souborB.Descendants("StoItem") _
        Where (partno.Attribute("PartNo") = JenomPartNo) _
        Select Kod = partno.Attribute("Code").Value
        ABANavrhPodlePartno.Text = partnos.ElementAt(0)

    End Sub

Akorát mi připadá trochu "neefektivní" přiřazovat do souboru souborB celé veliké soubory XML kvůli tomu, abych v nich našel pomocí LINQ příkazu jedinou hodnotu. Protože to potřebuji udělat pro jeden hledaný řetězec v devíti velkých cenících od dodavatelů a protože to takhle potřebuju udělat třeba pro desítky hledaných řetězců během seance, nepřipadá mi efektivní tolikrát ty soubory loadovat a prohledávat.

Bohužel nejde otevřít jeden ceník a v něm najít najednou všechny partno, pak otevřít jiný ceník a opět vyhledat jiné partno (resp. kód jemu odpovídající), protože ty partno se ke mně dostávají jaksi průběžně. Až poté, co zjistím ekvivalentní kódy k partno u všech distributorů se mi totiž dostane jiný partno ke zpracování.

Nějaká myšlenka, jak to udělat efektivněji?

tenhle kód je jen hrubý nástřel, samozřejmě neřeší situaci, kdy se dané partno v konkrétním ceníku nenalezne (nyní prostě aplikace skončí s chybou, no).

Díky za nápady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback