8
votes

LINQ à SQL Sélectionnez dans une nouvelle classe

Mon problème est que lorsque j'ai suivi 2 questions, la 1ère one ne remplit pas la propriété campagne, mais la 2e première. Voici mon code;

Query 1 Strong>; p>

public class MSReport
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int CampaignID { get; set; }

    public MSReport()
    {
        // CampaignID = 0 here  
        // doing something with CampaignID here like setting some calculated properties.    
    }  
 }


2 commentaires

Quel problème rencontrez-vous lorsque vous utilisez la première requête?


J'ai mis à jour la question. La propriété campagne n'a pas été renseignée par G.Key sur la première requête.


3 Réponses :


0
votes

Peut-être que le constructeur par défaut fonctionne avant l'initialisation des paramètres? Essayez d'ajouter constructeur dans MS Signaler avec vos params et débogage.

select new MSReport(g.Key) {
                               StartDate = d1,
                               EndDate = d2
                    }


0 commentaires

18
votes

Lorsque vous utilisez la syntaxe d'initialisateur d'objet, les valeurs spécifiées dans l'initialiseur sont définies après l'exécution du constructeur de l'objet. Si vous avez besoin des valeurs que vous essayez de remplir pour être disponible pour être disponible pour le constructeur, vous devez ajouter une forme de constructeur qui prend les valeurs comme des arguments et remplit les champs ou les propriétés elles-mêmes.

Dans votre classe: P >

var query = from c in _context.MCTargets
                  where c.TargetDateFrom==d1 && c.TargetDateTo<=d2
                  group c by c.MarketingCampaignID into g
                  select new {
                      CampaignID = g.Key,
                      StartDate = d1,
                      EndDate = d2
                  };

IEnumerable<MSReport> queryMSReports = from item in query.AsEnumerable()
                                       select new MSReport(item.CampaignID, item.StartDate, item.EndDate);


2 commentaires

Eh bien, il dit maintenant - "Seuls les constructeurs et initialisateurs sans paramètre sont supportés par Linq aux entités."


Le lien suivant contient une explication de la raison pour laquelle cela se produit et un moyen de contourner l'entourage: social.msdn.microsoft.com/forums/en-us/adodototentityframew ork / ...



1
votes

Voici un exemple .... xxx

Appmodel.shapeTypes est une entité de Cadre d'entité .

 Entrez la description de l'image ici


0 commentaires