我有以下课程:
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
我听说有两种编码方法。任何人都可以解释这些并建议哪个更好。
答案 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
构造函数,该构造函数将Menu
或ToMenuItem
方法带到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()
以立即实现收集。