Sto cercando di utilizzare una query dinamica linq per recuperare un oggetto IEnumerable <T> da una raccolta di oggetti (da Linq a oggetto), ciascuno degli oggetti in la collezione ha una raccolta interna con un'altra serie di oggetti in cui sono memorizzati i dati, questi valori si accede attraverso un indicizzatore dalla collezione esternoLinq dinamico - Esegui una query su un oggetto con membri di tipo "dinamico"
la query LINQ dinamica restituisce il filtrato impostato come previsto quando si lavora con oggetti fortemente tipizzati ma il mio oggetto memorizza i dati in un membro di tipo dinamico, vedere l'esempio di seguito:
public class Data
{
public Data(string name, dynamic value)
{
this.Name = name;
this.Value = value;
}
public string Name { get; set; }
public dynamic Value { get; set; }
}
public class DataItem : IEnumerable
{
private List<Data> _collection;
public DataItem()
{ _collection = new List<Data>(); }
public dynamic this[string name]
{
get
{
Data d;
if ((d = _collection.FirstOrDefault(i => i.Name == name)) == null)
return (null);
return (d.Value);
}
}
public void Add(Data data)
{ _collection.Add(data); }
public IEnumerator GetEnumerator()
{
return _collection.GetEnumerator();
}
}
public class Program
{
public void Example()
{
List<DataItem> repository = new List<DataItem>(){
new DataItem() {
new Data("Name", "Mike"),
new Data("Age", 25),
new Data("BirthDate", new DateTime(1987, 1, 5))
},
new DataItem() {
new Data("Name", "Steve"),
new Data("Age", 30),
new Data("BirthDate", new DateTime(1982, 1, 10))
}
};
IEnumerable<DataItem> result = repository.AsQueryable<DataItem>().Where("it[\"Age\"] == 30");
if (result.Count() == 1)
Console.WriteLine(result.Single()["Name"]);
}
Quando eseguo l'esempio di cui sopra ottengo: '==' operatore incompatibile con 'Oggetto' tipi di operando e 'Int32'
Sono dinamiche membri incompatibili con le query dinamica LINQ ?, o c'è un altro modo di costruire espressioni che valuterà correttamente quando si tratta di membri di tipo dinamico
Grazie mille per il vostro aiuto.
Quindi non sono veramente "compatibili"? –
Grazie, le soluzioni funzionano bene quando conosciamo in anticipo il tipo di runtime del valore, ma per quanto riguarda quando la query viene creata in modo programmatico, non sapremo veramente come convertire i valori in anticipo. C'è un altro modo in cui un'espressione può essere costruita? – Darsegura
@ M.Babcock: dipende dalla tua definizione di 'compatibile'. – afrischke