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.
Ten druhý kód je takhle celý, nebo jsi tam něco vynechal? Hlásí tu chybu hned nebo až za běhu?
Jak je definovaná třída InventorySQL?
Hned při psaní hlásí tu chybu.
A odpovědi na ostatní dotazy?
Jak to myslíš?
Mám řádek:
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:
Tedy při konstrukcích, kdy uvádím jméno tabulky a operaci Where atd.....
No a proto jsem se ptal na třídu InventorySQL.
Tak. Vážení kolegové. Nakonec jsem to vyřešil následně v duchu:
Škoda, že jste mě neporadili tímto směrem !