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

Jes*_*ica 2 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; }
}
Run Code Online (Sandbox Code Playgroud)

这也是返回ICollection的

var menu = _menuRepository.GetPk(pk);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何使用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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 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
             };
Run Code Online (Sandbox Code Playgroud)

您可能需要考虑添加一个带有MenuItema MenuToMenuItem方法的构造函数Menu,以便您可以使用:

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

(与吉米的回答一样,你可以打电话ToList来实现结果List<T>.)


k.m*_*k.m 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 
                 });
Run Code Online (Sandbox Code Playgroud)

您可以.ToList()立即投掷到物化集合.