[linq] restituire fonte dati da funzione in classe

giovedì 05 agosto 2010 - 13.22
Tag Elenco Tags  C#  |  .NET 3.5

Amodio Profilo | Expert

salv a tutti
ho una classe ho creato una funzione per caricare il mio gridview
se scrivo:

[CODE]public class CLS_Market : CLS_Connect { public IEnumerable<CLS_Market> List2(int? TypeID) { DataClass.DataClassDataContext DB = new DataClass.DataClassDataContext(); var blo= DB.MarketList(TypeID).AsEnumerable(); return blo as IEnumerable<CLS_Market>; } [/CODE]
se cerco di associarlo nel mio WebForm alla fonte dati del gridview
mi da erroe in quanto è impossibile convertire Object in IEnumerable

ho trovato nella documentazone che LINQ restituisce un tipo di dati iSingleResult, ma proprio non riesco a referenziarlo eppure uso "using system.linq"
come potete vedere dall'immagine lo ho referenziato, ma continua a dare errore
[IMG]http://www.freeimagehosting.net/uploads/b623a6c6ae.jpg[/IMG]

sneeze Profilo | Newbie

non ho capito bene cosa devi fare cmq ti posto un esempio funzionante così magari trovi l'errore

public partial class Form1 : Form { public Form1() { InitializeComponent(); dataGridView1.AutoGenerateColumns = true; dataGridView1.DataSource = MyEntity.ToIEnumerable(); } } public class MyEntity { public int Id { get; set; } public string Nome { get; set; } public string Cognome { get; set; } public MyEntity(int id, string nome, string cognome) { Id = id; Nome = nome; Cognome = cognome; } public static IEnumerable<MyEntity> ToIEnumerable() { var persone = new List<MyEntity> { new MyEntity(1, "mario", "rossi"), new MyEntity(2, "giuliano", "verona"), new MyEntity(3, "maria", "parigi"), new MyEntity(4, "giuseppe", "roma") }; var blo = persone.AsEnumerable(); return blo; } }

Amodio Profilo | Expert


737x220 25Kb


ok ok ci siamo quasi, ora non mi da piu errore nella definizione del metodo, ma nel return...
dai dai...cosa sbaglio? come mai da questo errore?
il tuo esempio è ottimo, solo che io seleziono i dati da DB quindi mi perdo un po

sneeze Profilo | Newbie

stai tronado una cosa diversa rispetto a quello che definisci nel metodo come return.
nel metodo tu hai IEnumerable<CLS_Market> mentre la tua funzione MarketList(int id) torna un Enumerable<MarketListResult>

Controlla cosa torna il metodo MarketList(int id) perchè è di tipo diverso

Amodio Profilo | Expert

si è vero
ho fatto un po di tentativi ,e questo è il codice che funziona, solo non riesco a spiegarmelo perche
devo inserire nell'ienumerable <dataclass.marketListresult>

dataclass ovviamente è interfaccia che uso nel class Diagram
marketListResult se lo crea lui, ma la classe si chiama CLS_market
e cmq...restituisce un isingleResult, ma se metto ienumerable gli va bene, mentre isingleresult gli da fastidio
public static IEnumerable<DataClass.MarketListResult> List2(int? TypeID) { DataClass.DataClassDataContext DB = new DataClass.DataClassDataContext(); var result = DB.MarketList(TypeID).AsEnumerable(); return result; }

sneeze Profilo | Newbie

ma abbi pazienza quel TypeId è una colonna della tabella???? cioè una proprietà della tua classe CLS_Market?????
se si perchè non fai un metodo

public static List<CLS_Market> List2(int? TypeID) { var DB = new DataClass.DataClassDataContext(); return DB.CLS_Markets.Where(i => i.TypeID == TypeID).toList(); }

perchè c'è qualcosa nell'organizzazione delle classi e nel tuo utilizzo del linQ to Sql che non mi quadra.... non vorrei che tu stia proprio sbagliando impostazione

per esempio CLS_Market l'hai creata tu come classe oppure è quella creata da linqtosql nel dbml???? come si chiama la tabella??? CLS_Markets oppure MarketList... MarketList l'hai creata tu????
Non capisco come siano organizzate le classi... mi sa che hai un pò di casino....

Amodio Profilo | Expert

CLS_Market è la classe ce contiene i metodi
io sto utilizzando le stored procedure, è una direttiva del cliente dove mi trovo
non potrei fare una where in quanto devo proprio utilizzare le SP

sneeze Profilo | Newbie

Se CLS_Market è una classe che usi per contenere dei metodi è ovvio che non ti funzioni....
Tu vuoi tornare una lista di Entità di un certo tipo, non una lista di classi che contengono metodi......
public IEnumerable<CLS_Market> stà ad indicare un oggetto IEnumerable di CLS_Market... ma CLS_Market non è una entità del tuo db... è una classe che hai creato tu non c'entra nulla con il db. Come ti puoi aspettare che una SP ti ritorni un gruppo di CLS_Market????

Ovviamente devi usare un IEnumerable<"entity ritornante da linQ">

Oppure se vuoi costruirti una tua Entity per quel tipo di oggetti devi convertire quello che ti torna linQ in una lista<"tua entita">


P.S. isingleResult è una proprietà non un tipo....
Quindi è normale che tu non possa castare quello che torna il metodo in un isSingleResult... perchè non è un tipo ma un proprietà boolean....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5