Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

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的筛选列表#_C#_Linq - Fatal编程技术网

C# 基于两个不同数据列linq C的筛选列表#

C# 基于两个不同数据列linq C的筛选列表#,c#,linq,C#,Linq,如何使用LINQ C#根据两个不同的列(一个是数字(最小的数字))从列表中筛选项目 公共类行 { 公共int Id{get;set;} 公共列表行项目{get;set;} 公共电话线() { LineItems=新列表{ 新行项目{Num=1,Name=“i”,数量=0,活动=false}, 新行项目{Num=2,Name=“j”,数量=2,活动=false}, 新行项目{Num=3,Name=“k”,数量=3,活动=false}, }; } } 公共类行项目 { 公共int Num{get;s

如何使用LINQ C#根据两个不同的列(一个是数字(最小的数字))从列表中筛选项目

公共类行
{
公共int Id{get;set;}
公共列表行项目{get;set;}
公共电话线()
{
LineItems=新列表{
新行项目{Num=1,Name=“i”,数量=0,活动=false},
新行项目{Num=2,Name=“j”,数量=2,活动=false},
新行项目{Num=3,Name=“k”,数量=3,活动=false},
};
}
}
公共类行项目
{
公共int Num{get;set;}
公共字符串名称{get;set;}
公共整数数量{get;set;}
公共bool活动{get;set;}
}

我想筛选此列表,并根据Qty=0和最小num值获取行项目

您可以尝试在升序模式下获取
Qty
的最小值为
0
和order by
Num
,然后获取第一项。对于示例:

var item = LineItems.Where(x => x.Qty == 0).OrderBy(x => x.Num).First();

尝试按
Qty==0
进行筛选,根据
Num
进行排序,并保留第一个:

var lineItem = LineItems.Where(l => l.Qty == 0).OrderBy(l => l.Num).FirstOrDefault();
或者只保留第一个
Qty
等于
0
Num
等于可能的最小值:

var minNum = LineItems.Where(l => l.Qty == 0).Min(l => l.Num);
var lineItem = LineItems.FirstOrDefault(l => l.Qty == 0 && l.Num == minNum);

如果让LineItem类实现
IComparable
,则可以执行以下操作:

public class LineItem : IComparable<LineItem>
{
    public int Num { get; set; }
    public string Name { get; set; }
    public int Qty { get; set; }
    public bool Active { get; set; }

    public int CompareTo(LineItem other)
    {
        if (other.Num > this.Num)
            return -1;
        else if (other.Num == this.Num)
            return 0;
        else
            return 1;

    }
}

谢谢,这很有效。但是,如果我有一个集合,其中包含两个或多个数量为0的项目,该怎么办。就像这个…“public Line(){LineItems=new List{new LineItem{Num=1,Name=“i”,Qty=1,Active=false},new LineItem{Num=2,Name=“j”,Qty=0,Active=false},new LineItem{Num=3,Name=“k”,Qty=0,Active=false};}@codeFazal:在linq中,您保留的
Qty==0
项可能不止一个,但是在那之后,你将只选择一个具有最小
Num
值的,我不得不选择@Arturo Menchaca,尽管由于时差,你们给出了相同的答案。
public class LineItem : IComparable<LineItem>
{
    public int Num { get; set; }
    public string Name { get; set; }
    public int Qty { get; set; }
    public bool Active { get; set; }

    public int CompareTo(LineItem other)
    {
        if (other.Num > this.Num)
            return -1;
        else if (other.Num == this.Num)
            return 0;
        else
            return 1;

    }
}
var item = l.LineItems.Where(p => p.Qty == 0).Min();