webForumDet fria alternativet

Skapa en IN fråga med linq

.NET

3 svar · 466 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Hej,
hämtar produkter utifrån kategori ur en xml-fil med linq.

public IOrderedEnumerable<XElement> GetProducts(string categoryid)
        {
            XElement tree = Load();

            var products = from tr in tree.Elements("products").Elements()
                     where ((string)tr.Attribute("categoryids")).Contains(categoryid)
                     orderby (string)tr.Attribute("name")
                     select tr;

            return products;
        }

Xmlfil:

<?xml version="1.0" encoding="utf-8" ?>
<products>
	<product categoryids="boende,hus" name="Prod 1" />
	<product categoryids="mat,fika" name="Prod 2" />
	<product categoryids="husvagn" name="Prod 3" />
</products>

Går det att bygga om Contains så att det blir som en IN istället (om man översätter det i sql)?

Problemet nu är att om jag skickar in kategori "hus" så ska Prod 1 hämtas men nu hämtas även Prod 3 för att hus finns i husvagn!

Medlem sedan juni 20008 205 inlägg
#2

Du får dela upp strängen först, och sen kolla på varje enskild symbol. Typ:
where Array.IndexOf(((string)tr.Attribute("categoryids")).Split(','), categoryid) >= 0

Medlem sedan aug. 20003 575 inlägg
#3

Varför inte ha det såhär i xmlfilen.

<?xml version="1.0" encoding="utf-8" ?>
<products>
	<product categoryids="boende,hus" name="Prod 1" >
              <CategoryId value="Boende" />
              <CategoryId value="Hus" />
        </product>
</products>
Medlem sedan juni 20003 076 inlägg
#4

spango skrev:

Du får dela upp strängen först, och sen kolla på varje enskild symbol. Typ:
where Array.IndexOf(((string)tr.Attribute("categoryids")).Split(','), categoryid) >= 0

Snyggt! :bire

Nickemannen skrev:

Varför inte ha det såhär i xmlfilen.

Jag hade typ så från början men det strula så mycket när jag hämtade via bla. Elements, jag fick med undernoder som jag inte ville ha, så jag gjorde attribut istället!
Nu funkar det tipp topp! :)

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)