如何在转发器中绑定之前拆分字符串

时间:2015-04-13 09:55:15

标签: c# asp.net linq

我有这样的Linq查询:

var result = from c in db.Class
                 join s in db.Students on c.Cls_Id equals s.Cls_Id
                 select new
                 {
                     s.Stud_Id,
                     s.FirstName,
                     c.Cls_Id,
                     c.Room,
                     c.Notification
                 };
repeater.DataSource = result.ToList();
repeater.DataBind();

但是在Notification字段中有这样的内容:这个C编程类/ NTFF的房间。如果在Lable Text='<%#DataBinder.Eval(Container.DataItem, "Notification")%>'中绑定,它将显示:此C语言编程类/ NTFF

我想将此字符串拆分为2个字符串,如下所示:

  

str1 =这个C编程课堂;

     

str2 = NTFF;

在绑定并将str1绑定到Lable1和str2绑定到Lable2之前。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

您可以使用Split功能获取str1,如下所示: -

 var result = from c in db.Class
                 join s in db.Students on c.Cls_Id equals s.Cls_Id
                 select new
                 {
                     s.Stud_Id,
                     s.FirstName,
                     c.Cls_Id,
                     c.Room,
                     str1 = c.Notification.Split('/').FirstOrDefault()
                 };

然后,您可以将它绑定到您的Label: -

<asp:Lable Text='<%#DataBinder.Eval(Container.DataItem, "str1")%>'><asp:Label/>

<强>更新

由于您使用的是Entity Framework,因此无法直接使用Split功能。您需要将结果存入内存。一种方法是创建一个自定义类并填充如下: -

public class Students
{
   public int Stud_Id { get; set; }
   public string FirstName{ get; set; }
   public int Cls_Id{ get; set; }
   public string Room{ get; set; }
   public string Notification{ get; set; }
   public string str1{ get; set; }
   public string str2{ get; set; }
}

然后,首先使用以下查询填充您的自定义类: -

List<Students> students = (from c in db.Class
                 join s in db.Students on c.Cls_Id equals s.Cls_Id
                 select new Students
                 {
                     Stud_Id = s.Stud_Id,
                     FirstName = s.FirstName,
                     Cls_Id = c.Cls_Id,
                     Room = c.Room,
                     Notification= c.Notification
                 }).ToList();

最后,遍历结果并填写str1&amp; str2这样的变量: -

foreach (Student student in students)
{
    string[] Notifications = student.Notification.Split('/');
    student.str1 = Notifications.FirstOrDefault();
    student.str2 = Notifications.ElementAtOrDefault(1);
 }

在此之后,只需使用参数str1&amp; str2

答案 1 :(得分:0)

使用string.Replace(),如下所示:

<%# ((string)DataBinder.Eval(Container.DataItem, "Notification")).Replace("/NTFF", string.Empty) %>

请先检查语法。但是应该在这种情况下工作。如果它不起作用,请告诉我。

编辑:

代码背后:

var result = from c in db.Class
                 join s in db.Students on c.Cls_Id equals s.Cls_Id
                 select new
                 {
                   Id = s.Stud_Id,
                   FirstName = s.FirstName,
                   ClassId = c.Cls_Id,
                   Room = c.Room,
                   FirstNotification = c.Notification.Split('/')[0],
                   SecondNotification = c.Notification.Split('/')[1]
                 };

然后在前端使用FirstNotificationSecondNotification属性。 注意:如果没有'/'字符,上面的代码将抛出索引超出范围异常。

答案 2 :(得分:0)

您可以使用以下内容:首先创建一个DTO来存储包含所有字段的结果实体以及一个用于存储通知列表的额外字段。

public class Result
{
    public int Stud_Id { get; set; }
    ...
    ...
    public string Notification { get; set; }
    public string[] Notifications { get; set; }
}

List<Result> result = from c in db.Class
    join s in db.Students on c.Cls_Id equals s.Cls_Id
    select new Result
    {
        Stud_Id = s.Stud_Id,
        ...
        ...
        Notification = c.Notification
    }).ToList();

result.ForEach(r =>
    {
        r.Notifications = r.Notification.Split('/');
    });

现在通知中有两个字符串:

Notification[0] = "This Room of C Programming Class";
Notification[1] = "NTFF"

现在,你可以使用你想要在Lable中绑定的任何一个。