求个表达式写法

E次奥 2015-12-16 12:13:54
比如 有集合list<A>中有3条记录

A Name Count
ABB 5
FGD 10
ADA 10

求一个表达式实现 我输入 11查出前两条记录 ; 输入5查出第一条记录;输入16查出前三条记录;

就是查出排序后的Count之和大于或等于输入的数的记录集合


...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2015-12-16
  • 打赏
  • 举报
回复
list.Where(x => x.Count <= input).ToList();
q107770540 2015-12-16
  • 打赏
  • 举报
回复
逻辑和我几年前写的一篇blog很类似,见此 http://blog.csdn.net/q107770540/article/details/6625243
q107770540 2015-12-16
  • 打赏
  • 举报
回复
这样看着更清晰一些:


void Main()
{
foreach(var item in GetOutPut(5))
Console.WriteLine(item.Name+"----"+item.Count);
Console.WriteLine(new string('*',50));

foreach(var item in GetOutPut(11))
Console.WriteLine(item.Name+"----"+item.Count);

Console.WriteLine(new string('*',50));
foreach(var item in GetOutPut(16))
Console.WriteLine(item.Name+"----"+item.Count);

/*
ABB----5
**************************************************
ABB----5
FGD----10
**************************************************
ABB----5
FGD----10
ADA----10
*/
}

List<A> GetOutPut(int input)
{
var list=new List<A>{
new A{ Name="ABB", Count=5},
new A{ Name="FGD", Count=10},
new A{ Name="ADA", Count=10}
};

var result=new List<A>();

var query= list.OrderBy(x=>x.Count)
.Aggregate((m,n)=>
{
var current=result.Sum(r=>r.Count);
if(current <input){
if(m.Count+current>=input)
{
result.Add(m);
}
else if(m.Count+n.Count+current>=input)
{
result.Add(m);
result.Add(n);
}
else
{
result.Add(m);
result.Add(n);
return n;
}
}
return m;
} );
return result;
}

class A
{
public string Name{get;set;}
public int Count{get;set;}
}
q107770540 2015-12-16
  • 打赏
  • 举报
回复
有意思...
  • 打赏
  • 举报
回复
List<int> list = new List<int>() { 5, 10, 12 };
List<int> resultList = new List<int>();
int number = 5;
int total = 0;
foreach (var i in list)
{
    if (total >= number)
    {
        break;
    }
    total += i;
    resultList.Add(i);
}
Console.WriteLine(string.Join(",", resultList));
Poopaye 2015-12-16
  • 打赏
  • 举报
回复
引用 2 楼 porenasckx 的回复:
求多条记录,要求Count之和刚好大于或等于Input
这样?要就一句表达式写不来
int count;
List<A> output = new List<A>();
foreach(A item in list)
{
     output.Add(item);
     count += item.Count;
     if(count >= input)
          break;
}
  • 打赏
  • 举报
回复
是要查出最小的组合,按顺序? 那这不是linq做的事情了吧,你这个循环下不就可以了?
  • 打赏
  • 举报
回复
可以自己写个校验方法 ,校验list的属性是否大于传入值,否+ list[i+1] ,并把list[i] 放入新的list
E次奥 2015-12-16
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
list.Where(x => x.Count <= input).ToList();
求多条记录,要求Count之和刚好大于或等于Input

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧