0

我有两个具有 1-M 关系的表“Category”和“Movie”(“CategoryID”是“Movie”表中的外键)。我正在使用 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) %>'>

现在我有一个要求,我需要按名称对我的电影进行排序,但是如果电影以“The”开头,那么我需要忽略它并按名称的其余部分排序(所以“指环王”将是排序为“指环王”)。

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

4

2 回答 2

2
((Category)Container.DataItem).CategoryItems.Where(p => p.Active == true).OrderBy(p => p.Name.StartsWith("The ") ? p.Name.Substring(4): p.Name)
于 2014-07-02T15:20:30.213 回答
0

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

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

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

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

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();

现在,您拥有的数据应该被正确格式化,以像以前一样做您想做的事情。

于 2014-07-02T15:31:54.370 回答