利用Lambda表达式从实体集合中筛选出符合条件的实体集合_习惯成自然-CSDN博客_c# lambda 列表 满足条件的

前言

  已知存在两张表:表A和表B,表A中有一个字段存储的是表B的部分Id集合,以字符串的形式存储,如图1-1所示:

这里写图片描述
图1-1 表A中的字段

  现在我获取到了表A中这个字段的值和表B中所有数据的实体集合,怎么用Lambda表达式找到表B中这些Id对应的实体的集合呢?这句话我写的可能有点绕,你可以多读几遍。

解决方案

List<AppointFunctionItem> APFI = functionItem.Select();
string relateItemId = programme.RelateItemDirectoryNO;

List<AppointFunctionItem> functionItemList = 
APFI.Where(o =>relateItemId.Split(',').Contains(o.AppointFunctionItemID.ToString())).ToList();

  如果这样看不懂的话,其实可以将其分解为如下代码:

List<AppointFunctionItem> APFI = functionItem.Select();
string relateItemId = programme.RelateItemDirectoryNO;

string[] ids = relateItemId.Split(',');
List<AppointFunctionItem> resultList = new List<AppointFunctionItem>();
for (int i = 0; i < ids.Length; i++)
{
    resultList.Add(APFI.Find(o => o.AppointFunctionItemID.ToString() == ids[i]));
}

使用场景

  其实这个操作,我之前的处理方式是将表A中的字符串作为查询条件去数据库直接读取符合条件的表B的实体集合,这样也可以实现。但是呢,程序中这个操作算的上是使用率较高的,如果采用这种方式,程序有时候会出现卡顿的现象(毕竟需要一次与服务器的交互)。而Lambda表达式正好解决了这个问题。

结语

  第一种方式用where查询,一行代码即可,但是有点长。第二种方式用find查询,容易理解。两种方式的基本思路都是先用Split函数将字符串"1,2,3,4"分解为字符串数组{"1","2","3","4"},再去根据此数组查询出满足条件的实体集合。第一种方式还用到了Contains函数。


Original url: Access
Created at: 2020-06-03 14:25:09
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论