C# 基于两个不同数据列linq 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
公共类行
{
公共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 byNum
,然后获取第一项。对于示例:
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();