如何在LINQ调用中返回前50个字符的文本

Ref*_*din 8 c# linq-to-sql winforms

我有一个使用LinqToSQL的小winapp,因为它是DAL.我正在为给定的人创建所有CaseNotes的摘要视图,其中一个字段是Details框.我只需要将该列的前50个字符返回到我的treeview函数.

有关我如何做到这一点的任何提示?下面是我的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;
    }
Run Code Online (Sandbox Code Playgroud)

回答

我在这里发布这个,以防任何未来的搜索者想知道问题上下文中的解决方案是什么样的.

        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;
    }
Run Code Online (Sandbox Code Playgroud)

jas*_*son 12

String.Substring:

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))
                    };
Run Code Online (Sandbox Code Playgroud)

另外,我建议您包装使用DataContext小号using块.

  • 问题是如果ContactDetails中的文本长度不是50个字符,您将获得异常.你做的是...... ContactDetailsClip = cn.ContactDetails.Length> 50?cn.ContactDetails.Substring(0,49):cn.ContactDetails; (2认同)

Kro*_*oaX 5

使用 LinQ,您还可以执行以下操作:

new string( myString.Take(50).ToArray() );
Run Code Online (Sandbox Code Playgroud)