有条件地合并两个列表中的数据
表结构如下
MobileID ModelID ManufacturerID IsApproved
其中IsApproved是布尔值,
当新的移动条目在数据库中完成时,它会向经理批准,直到它的IsApproved值为0,当它被批准时,IsApproved值将变为1.
我想按照以下方式进行操作
我使用下面的第一个查询获取所有已批准的移动设备的列表
现在问题是我必须根据2个条件显示所有手机
1)如果移动设备具有相同的modelID和manufacturerID(表示规范已更新),则IsApproved字段将变为0 - >不在数据库中,而是在列表中仅用于显示目的)
2)如果Mobile是新的,则IsApproved状态应为0
如何有条件地合并这两个列表?
我的LINQ查询如下
var listApproved = objMobile.MobileLists.where(mb => mb.IsApproved == true).toList();
var listUnApproved = objMobile.MobileLists.where(mb => mb.IsApproved == false).toList();
假设表数据如下
MobileID ModelID ManufacturerID IsApproved
01 mod1 manu1 1
02 mod2 manu2 1
03 mod3 manu3 1
04 mod1 manu1 0
05 mod5 manu5 0
06 mod6 manu6 0
07 mod2 manu2 0
我希望列表为
MobileID ModelID ManufacturerID IsApproved
01 mod1 manu1 0
02 mod2 manu2 0
03 mod3 manu3 1
05 mod5 manu5 0
05 mod6 manu6 0
答案 0 :(得分:1)
好吧,首先让我们将你的列表缓存在内存中,以免我们多次获取它:
var listOfAllMobiles = objMobile.MobileLists.ToList();
现在让我们按照你的逻辑来获取所有手机:
var mobileList = listOfAllMobiles
.Select(m => new Mobile
{
IsApproved = m.IsApproved == true && !listOfAllMobiles
.Any(l => l.ModelID == m.ModelID
&& l.ManufacturerID == m.ManufacturerID
&& l.MobileID != m.MobileID),
MobileID = m.MobileID,
ModelID = m.ModelID,
ManufacturerID = m.ManufacturerID
})
.ToList();
编辑:上述代码会设置正确的值,但不会过滤掉包含重复ManufacturerId
和ModelID
的手机。您将不得不使用额外的foreach
,如下所示:
var displayMobileList = new List<Mobile>();
foreach(var mobile in mobileList
.Where(m => !displayMobileList
.Any(m2 => m2.ModelID == m.ModelID
&& m2.ManufacturerID == m.ManufacturerID)))
{
displayMobileList.Add(mobile);
}