使用LINQ删除ASP.NET标记中的子字符串

时间:2014-07-02 15:08:56

标签: c# asp.net regex linq asprepeater

我有两张桌子"类别"和"电影"与1-M关系(' CategoryID'是表中的外键"电影")。 我使用ListView列出所有类别。我的ListView内部是Repeater,它遍历每个类别中的所有电影。

在我的代码隐藏中,我按如下方式绑定ListView DataSource:

MovieDBDataContext context = new MovieDBDataContext();
var categories = context.Categories.Select(x => x).OrderBy(x => x.Order).ToList();                           

ListView1.DataSource = categories;
ListView1.DataBind(); 

我在标记中绑定Repeater DataSource,如下所示:

<asp:Repeater runat="server" ID="repeater" DataSource='<%# ((Category)Container.DataItem).CategoryItems.Where(p => p.Active == true).OrderBy(p => p.Name) %>'>

现在我有一个要求,我需要按名称对电影进行排序,但是如果一部电影以&#34;&#34;我需要忽视这一点并对名称的其余部分进行排序(所以&#34;戒指之王&#34;将被排序为&#34;戒指之王&#34;)。

有没有办法修改我的Linq语句以动态操作字符串?

2 个答案:

答案 0 :(得分:2)

((Category)Container.DataItem).CategoryItems.Where(p => p.Active == true).OrderBy(p => p.Name.StartsWith("The ") ? p.Name.Substring(4): p.Name)

答案 1 :(得分:0)

您可以创建一个类别,您可以在其中拥有所需的属性。

public class Categories {
    public string Movies { get; set; }
    public string Category { get; set; }
}

我不确切知道你从数据库中获得了什么,但是对于每个项目,你可以创建一个n属性,它允许你从数据库中获取数据并将其存储为类型对象。

当您实际填写数据时,您可以使用以下代码

List<Categories> categories = .Select(x => new Categories { 
Movies = (x.Movies.substring(0, 3).ToLower().Equals("the")) ? 
x.Movies.substring(3) + ", " + x.Movies.substring(0, 3) : 
x.Movies, Category = x.Category).OrderBy(x => x.Order).ToList();

现在您应该正确格式化您拥有的数据,以执行您之前尝试执行的操作。