Как вернуть первые 50 символов текста в вызове LINQ - PullRequest
8 голосов
/ 09 июля 2009

У меня есть маленький winapp, который использует LinqToSQL, так как это DAL. Я создаю сводный вид всех CaseNotes для данного человека, и одним из полей является поле Details. Мне нужно вернуть только первые 50 символов этого столбца в мою функцию просмотра дерева.

Есть какие-нибудь советы, как мне это сделать? Ниже показано, как моя функция TreeView получает свои данные для отображения, а ContactDetails - это рассматриваемый столбец.

        public static DataTable GetTreeViewCNotes(int personID)
    {
        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, cn.ContactDetails };

        var dataTable = caseNotesTree.CopyLinqToDataTable();
        context.Dispose();
        return dataTable;
    }

ОТВЕТ

Я публикую это здесь на тот случай, если будущие поисковики задаются вопросом, как выглядит решение в контексте вопросов.

        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 ]

12 голосов
/ 09 июля 2009

String.Substring * * 1004

var caseNotesTree = from cn in context.tblCaseNotes
                    where cn.PersonID == personID
                    orderby cn.ContactDate
                    select new {
                        cn.CaseNoteID,
                        cn.ContactDate,
                        cn.ParentNote,
                        cn.IsCaseLog,
                        ContactDetailsClip = cn.ContactDetails.Substring(0, Math.Min(cn.ContactDetails.Length, 50))
                    };

Кроме того, я бы предложил использовать DataContext s в блоках using.

4 голосов
/ 22 февраля 2012

С LinQ вы также можете сделать следующее:

new string( myString.Take(50).ToArray() );
1 голос
/ 09 июля 2009

cn.ContactDetails.Substring(0, 50);

В строке «выбрать новую». Это работает?

...