如何使用LINQ过滤和排序从一个集合到另一个集合的行?

时间:2012-02-18 07:30:51

标签: c# linq

我有以下课程:

public class Menu
{
    public int Order { get; set; }
    public string Title { get; set; }
    public string Status { get; set; }
    public string Type { get; set; }
    public bool Default { get; set; }
    public string Link { get; set; }
    public string Notes { get; set; }
    public string Text { get; set; }
}

public class MenuItem
{
    public int Order { get; set; }
    public string Title { get; set; }
    public string Type { get; set; }
    public bool Default { get; set; }
    public string Link { get; set; }
}

这也会返回ICollection

var menu = _menuRepository.GetPk(pk);

有人可以告诉我如何使用LINQ:

a) Get the data from menu
b) Select only rows where Status = "00"
c) Order by Order
d) Put the data into the MenuItem class

我听说有两种编码方法。任何人都可以解释这些并建议哪个更好。

2 个答案:

答案 0 :(得分:6)

Jimmy的回答对我来说是正确的 - 这里是查询表达式中的等价物:

 var query = from m in _menuRepoistory.GetPk(pk)
             where m.Status == ""
             order by m.Order
             select new MenuItem
             {
                 Order = m.Order, Title = m.Title, Type = m.Type,
                 Default = m.Default, Link = m.Link
             };

您可能需要考虑添加一个MenuItem构造函数,该构造函数将MenuToMenuItem方法带到Menu,因此您可以使用:

 var query = from m in _menuRepoistory.GetPk(pk)
             where m.Status == ""
             order by m.Order
             select m.ToMenuItem();

(与Jimmy的回答一样,您可以致电ToList来实现List<T>中的结果。)

答案 1 :(得分:5)

试试这个:

var menuItems = _menuRepository.GetPk(pk)
    .Where(m => m.Status == "00")
    .OrderBy(m => m.Order)
    .Select(m => new MenuItem 
                 { 
                     Order = m.Order,
                     Title = m.Title,
                     Type = m.Type,
                     Default = m.Default,
                     Link = m.Link 
                 });

您可以在最后投掷.ToList()以立即实现收集。