J'ai un petit WinApp qui utilise Linqtosql comme il est dal. Je crée une vue sommaire de tous les casenotes pour une personne donnée et l'un des champs est une zone de détails. J'ai besoin de ne renvoyer que les 50 premiers caractères de cette colonne à ma fonction TreeView.
Toute astuce sur la façon dont je fais ça? Ce qui suit est la façon dont ma fonction de ma TreeView obtient ses données à l'affichage et que les contactsettails sont la colonne en question. P> Je pose Ceci ici dans le cas des recherches futures se demandent quelle est la solution dans le contexte des questions. P>
réponse h2>
public static DataTable GetTreeViewCNotes(int personID)
{
DataTable dataTable;
using (var context = new MATRIXDataContext())
{
var caseNotesTree = from cn in context.tblCaseNotes
where cn.PersonID == personID
orderby cn.ContactDate
select new
{
cn.CaseNoteID,
cn.ContactDate,
cn.ParentNote,
cn.IsCaseLog,
ContactDetailsPreview = cn.ContactDetails.Substring(0,50)
};
dataTable = caseNotesTree.CopyLinqToDataTable();
}
return dataTable;
}
3 Réponses :
Le problème avec ceci est si le texte dans ContactDétails n'est pas de 50 caractères de longueur, vous obtiendrez une exception. Qu'est-ce que vous faites est quelque chose comme ... contactez detailsClip = cn.ContactDétails.length> 50? cn.ContactDétaires.Substring (0, 49): CN.ContactTétails;
@Chalkey: Quand j'ai lu votre commentaire d'abord, j'étais comme "bien sûr", mais il est intéressant de noter qu'il n'éteigne pas ..... j'aimerais savoir pourquoi.
@Chalkey: Utilisez Math.Min (longueur de chaîne, longueur de clip). Voir Modifier.
@Jason: N'est-ce pas Math.Min à la place?
@Refracted Paladin: Ce code compilera, il ne s'écrasera pas jusqu'à ce que le temps d'exécution. C'est juste comme cette ligne de ligne S = "Bonjour" .Substring (0, 100); - Compilera, mais crash au moment de l'exécution.
@Chalkey: Je comprends ce que vous dites. Ce que je dis, c'est que cela ne se casse pas au moment de l'exécution. Même avec vide ou moins de 10 caractères présents dans le champ Détails. En fait, cela fonctionne parfaitement et je suis curieux de savoir pourquoi ce que vous dites a du sens et j'aurais attendu un échec.
@Refracted Paladin: Je ne suis pas sûr, je viens de le faire jeter une phrase argumentOfrangeException en se soustrant à beaucoup de temps que disponible.
cn.ContactDetails.Substring(0, 50); In the "select new" line. Does that work?
Vous devez donner le résultat un nom aussi.
avec LINQ Vous pouvez également effectuer les éléments suivants:
new string( myString.Take(50).ToArray() );