Problem mit LINQ to Objects

08/03/2009 - 13:57 von Roland Schumacher | Report spam
Hallo NG

Ich möchte mit einer LINQ Abfrage ein Typisiertes Object erhalten und nicht
var. Aber ich bekomme immer einen Fehler.

Die Klasse die ich abfragen will sieht so aus.
[...]
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;

[Serializable]
public class Content
{
public string Text { get; set; }
public Guid ID { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public int Count { get; set; }
public DateTime LastCount { get; set; }
public int MaxCount { get; set; }
public bool IsActive { get; set; }

public Content(string text)
{
this.Text = text;
}
}

[Serializable]
public class ContentContainer : List<Content>
{
public string ID { get; set; }

public ContentContainer(string id)
{
this.ID = id;
}
}

[Serializable]
public class ContentContainers : Dictionary<string, ContentContainer>
{
public ContentContainers()
: base() { }

public ContentContainers(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
[...]

Das LINQ Query so.
[...]
ContentContainer cCont = LoadContentContainer(id);

ContentContainer cContainer = (ContentContainer)cCont.Where(c =>
(c.IsActive)
&& (DateTime.Now >= c.DateFrom)
&& (DateTime.Now <= c.DateTo)).ToList();
[...]

Die Fehlermeldung:
[...]
Das Objekt des Typs "System.Collections.Generic.List`1[Content]" kann nicht
in Typ "ContentContainer" umgewandelt werden.
[...]

Wie muss ich die Abfrage machen damit ich ein ContentContainer statt einer
var nutzen kann?

Gruss
Roland Schumacher alias GENiALi
http://blog.geniali.ch/
http://jotd.geniali.ch
 

Lesen sie die antworten

#1 Philipp Brune
08/03/2009 - 14:19 | Warnen spam
Hallo Roland,

Roland Schumacher schrieb:
Hallo NG




Das Problem liegt daran, dass der ContentContainer von der generischen
List<Content> Klasse abgeleitet ist,

[Serializable]
public class ContentContainer : List<Content>
{



...

Dir die generische Where Methode aber ein IEnumerable<Content>
zurückliefert, dass durch den ToList Aufruf in eine List<Content>
umwandelst.


ContentContainer cContainer = (ContentContainer)cCont.Where(c =>
(c.IsActive)
&& (DateTime.Now >= c.DateFrom)
&& (DateTime.Now <= c.DateTo)).ToList();




Da ContentContainer von List<Content> abgeleitet ist, kannst Du
nicht List<Content> an ContentContainer zuweisen, sondern nur umgekehrt,
was die von Dir gepostete Fehlermeldung aussagt.

Das Objekt des Typs "System.Collections.Generic.List`1[Content]" kann
nicht in Typ "ContentContainer" umgewandelt werden.



Funktionieren würde es, wenn Du z.B. dem ContentContainer einen weiteren
Konstruktur der Form

public ContentContainer(IEnumerable<Content> source)
: base ( source )
{

}


gönnst, und dann den Code so umschreibst :

ContentContainer cContainer = new ContentContainer(cCont.Where(c =>
c.IsActive ... );

Schöne Grüße
Philipp

Ähnliche fragen