Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ从一个集合到另一个集合对行进行筛选和排序?_C#_Linq - Fatal编程技术网

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或存储库由于流程或其他限制而一成不变。它仍然胜过转换运算符。。。当然,尽管在某个地方有一个简单的静态助手方法也可以工作。