2008-11-11 8 views
1

Je ne m'attends pas à avoir une bonne réponse à cette question, donc si vous avez déjà eu de l'expérience, toute contribution serait appréciée. J'essaie d'utiliser le Concepteur de rapports Visual Studio avec une source de données Linq to SQL, je n'ai aucune expérience de l'utilisation du Concepteur de rapports Visual Studio. Si j'utilise l'assistant et que j'utilise une source de données d'objet, je peux obtenir un rapport simple répertoriant un seul type d'entité (c'est-à-dire une table SQL) assez facilement. Mes questions sont comment obtenir le rapport pour accepter des requêtes Linq complexes avec des jointures, des sommes etc. qui ont un type de retour anonyme. Si j'essaye ceci pour le moment j'obtiens une erreur de temps de compilation du concepteur de rapport en essayant d'employer la notation de point ou les noms d'alias pour arriver aux champs que je dois référencer dans les résultats de la question. Je pense que cela est parce que le concepteur attend le même type que celui spécifié dans l'assistant ...Problème lors de l'utilisation de Visual Studio Report Designer avec la source de données Linq to SQL

L'erreur est: -

expressions d'élément de rapport ne peuvent se référer aux champs dans le jeu de données en cours portée ou, si elle se trouve à l'intérieur d'un agrégat, l'étendue de jeu de données spécifiée .

Peut-être que je vais mieux utiliser DataSets?

Répondre

2

Écrivez une classe simple contenant toutes les propriétés dont votre rapport aura besoin (par exemple, MyData). Utilisez des types .NET simples pour chaque propriété: string, int, etc

Ecrivez une autre classe avec une méthode GetXxx, qui renvoie IEnumerable<MyData>. Cette méthode Get doit renvoyer les résultats de votre requête Linq. Vous pouvez faire un .ToList() avant de retourner, pour obtenir une liste en mémoire, vous permettant de fermer la connexion avant de revenir.

Compile.

Maintenant, ouvrez votre concepteur de rapports (dans la même solution), et vous devriez voir MyData répertorié dans votre fenêtre Sources de données, avec la méthode Get que vous avez écrite.

Si vous faites glisser les champs de cette source de données sur votre concepteur de rapports, puis que vous faites référence à ce rapport à partir d'un nouveau contrôle ReportViewer, ObjectDatasource sera automatiquement créé et lié pour vous.

Espérons que ça aide!

+0

Merci! Pourquoi je n'y ai pas pensé? Je vais l'essayer. –

Questions connexes