Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# LINQ - Dotaz - ASP .NET

Ahoj, nevím zda je možno můj dotaz řešit, asi je moc komplexní.

Mám databázi. Ta obsahuje tabulku Osob, míst a položek.
Tyto jsou provázany vazbami.

V pohodě mi tak funguje následující dotaz:
(nezalekněte se delší třídy, dotaz je jednoduchý)

 public class InventoryItemRow
    {
        InventoryItem _item = null;

        public InventoryItemRow(InventoryItem item)
        {
            _item = item;
        }

        public int ID
        {
            get
            {
                return _item.ID;
            }

        }

        public string Name
        {
            get
            {
                return _item.Name;
            }
        }
        public string Description
        {
            get
            {
                return _item.Description;
            }
        }
        public int InventoryNumber
        {
            get
            {
                return _item.InventoryNumber;
            }
        }

        public string PersonName
        {
            get
            {
                if (_item.Person == null)
                    return "";

                return _item.Person.Name;
            }
        }

        public string lokalita
        {
            get
            {
                if (_item.Person == null)
                    return "";
                return _item.Place.Name;
            }


        }


        public string ValidFrom
        {
            get
            {
                return _item.ValidFrom.ToShortDateString();


            }
        }

        public string ValidTo
        {
            get
            {
                if (_item.ValidTo == null)
                    return "";

                if (_item.ValidTo.HasValue)
                    return _item.ValidTo.Value.ToShortDateString();

                return "";

            }
        }

        public bool IsSelected { get; set; }

        public string PlaceID
        {
            get
            {
                return PlaceID;


            }


        }

        public string PersonId
        {
            get
            {
                return PersonId;


            }



        }


// A dotaz fungující vypadá takto:

 var context = new InventorySQL();

 var MyItems = context.InventoryItems.Where(l => l.Persons.id > 3).ToList();

   var rows = new List<InventoryItemRow>();

            foreach (var it in MyItems)
                rows.Add(new InventoryItemRow(it));
          
            
       //  Načtení výsledku do Gridu
         
            this.GridView1.DataSource = rows;
            this.GridView1.DataBind();
    



Uvedená ukázka bez problému funguje.
Já chci však implementovat fulltextové hledání a na to používám následující konstrukce:

                var rows = new List<InventoryItemRow>();

                var results = context.ExecuteQuery<InventoryItemRow>(@"Select Name From InventoryItems");

             // Foreach hlásí chybu   
                foreach (var it in results)
                    rows.Add(new InventoryItemRow(it));




                this.GridView1.DataSource = rows;
                this.GridView1.DataBind();


Jediné místo, kde to nefunguje je foreach, který v tomto případě hlásí chybu:
Error foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'

Napadá někoho, jak tuto chybku opravit?

Díky.

Předmět Autor Datum
Ten druhý kód je takhle celý, nebo jsi tam něco vynechal? Hlásí tu chybu hned nebo až za běhu? Jak j…
Wikan 22.09.2013 13:50
Wikan
Hned při psaní hlásí tu chybu.
Flash_Gordon 22.09.2013 13:51
Flash_Gordon
A odpovědi na ostatní dotazy?
Wikan 22.09.2013 13:56
Wikan
Jak to myslíš? Mám řádek: var results = context.ExecuteQuery<InventoryItemRow>(@"Select Name From…
Flash_Gordon 22.09.2013 13:58
Flash_Gordon
No a proto jsem se ptal na třídu InventorySQL. poslední
Wikan 23.09.2013 15:40
Wikan
Tak. Vážení kolegové. Nakonec jsem to vyřešil následně v duchu: var MyItems = context.InventoryIte…
Flash_Gordon 22.09.2013 20:24
Flash_Gordon

Jak to myslíš?

Mám řádek:

 var results = context.ExecuteQuery<InventoryItemRow>(@"Select Name From Persons");

A při zavolání konstrukce foreach na tuto proměnnou to hlásí tu chybu :-/

Naopak to funguje při těchto konstrukcích:

  var MyItems = context.InventoryItems.Where(l => l.ValidTo.HasValue).ToList();

Tedy při konstrukcích, kdy uvádím jméno tabulky a operaci Where atd.....

Tak. Vážení kolegové. Nakonec jsem to vyřešil následně v duchu:

  var MyItems = context.InventoryItems.Where(c => c.Name.Contains(TextBox1.Text) || c.Description.Contains(TextBox1.Text) || c.ValidFrom.ToShortDateString() == TextBox1.Text || c.ValidTo.Value.ToShortDateString() == TextBox1.Text || c.Person.Name == TextBox1.Text).ToList();

Škoda, že jste mě neporadili tímto směrem !

Zpět do poradny Odpovědět na původní otázku Nahoru