C# 的List<T>筛选数据填充到另一个List<T>

在使用List<T>获取数据库表的时候,每次用户操作都重新访问数据库,然后返回List<T>,会严重影响程序运行效率的方式,其实List<T>自带有筛选的方法,把想要的数据筛选到另一个List<T>中,不用重新访问数据库,直接筛选后绑定控件显示即可。
示例如下:

        public NumberModel currentmark;

        public MainFrm mainFrm;

 

        private List<GoodsModel> goodslist;

        private List<GoodsKindModel> goodskindlist;

 

        private void lstgoodkind_SelectedIndexChanged(object sender, EventArgs e)

        {

            try

            {

                if (lstgoodkind.SelectedValue.ToString() != "XY.Model.GoodsKindModel")

                {

                    string id = lstgoodkind.SelectedValue.ToString();

                    string kname = lstgoodkind.Text;

                    if (kname != "全部")

                    {

                        List<GoodsModel> glist = goodslist.FindAll(delegate(GoodsModel p) { return p.GoodsKind == kname; });

                        bindgoods(dgvgoods, glist);

                    }

                    else

                    {

                        bindgoods(dgvgoods, goodslist);

                    }

                }

            }

            catch(Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 

        private void btnAdd_Click(object sender, EventArgs e)

        {

            try

            {

                string gid = dgvgoods.Rows[dgvgoods.SelectedRows[0].Index].Cells["goodsid"].Value.ToString();

                GoodsModel goods = goodslist.Find(delegate(GoodsModel p) { return p.ID == gid; });

                XY.BLL.ConsumeBll.Add(goods, currentmark, mainFrm.user);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

更好的方法是利用lambda:

list.GroupBy(t => t.customerid)
                .Select(g => (new ViewSaleDetail()
                {
                    customerid = g.Key,
                    companyname = g.First().companyname,
                    unitname = g.First().unitname,
                    code = g.First().code,
                    customername = g.First().customername,
                    num = g.Sum(m => m.num),
                    paidinamount = g.Sum(m => m.paidinamount),
                    costprice = g.Sum(m => m.costprice),
                    actdisc = g.Average(m => m.actdisc * m.userdisc),
                    retailprice = g.Average(m => m.paidinamount)
                })).ToList();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三江831

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值