我有两张桌子"类别"和"电影"与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语句以动态操作字符串?
答案 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();
现在您应该正确格式化您拥有的数据,以执行您之前尝试执行的操作。