C# 如何使用LINQ从一个集合到另一个集合对行进行筛选和排序?
我有以下课程:C# 如何使用LINQ从一个集合到另一个集合对行进行筛选和排序?,c#,linq,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 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
我听说可能有两种编码方法。谁能解释一下这些,并建议哪一个更好 试试这个:
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()
,以立即实现收集。吉米的答案在我看来是正确的-以下是查询表达式形式中的等价项:
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 < /代码>构造函数,该构造函数采用<代码>菜单>代码>或<代码> ToMenuItem <代码>方法> <代码>菜单< /代码>,因此您可以只使用:
var query = from m in _menuRepoistory.GetPk(pk)
where m.Status == ""
order by m.Order
select m.ToMenuItem();
(就像Jimmy的回答一样,你可以调用
ToList
将结果具体化到列表中),或者创建一个扩展方法来实现:)@jessehouwing:我不会这么做-它看起来太具体了,不值得使用扩展方法,真的。同意,尽管我以前也这样做过,因为MenuItem或存储库由于流程或其他限制而一成不变。它仍然胜过转换运算符。。。当然,尽管在某个地方有一个简单的静态助手方法也可以工作。