Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有条件地合并两个列表中的数据_C#_.net_Linq_Linq To Entities - Fatal编程技术网

C# 有条件地合并两个列表中的数据

C# 有条件地合并两个列表中的数据,c#,.net,linq,linq-to-entities,C#,.net,Linq,Linq To Entities,有条件地合并两个列表中的数据 表结构如下所示 MobileID ModelID ManufacturerID IsApproved MobileID ModelID ManufacturerID IsApproved 01 mod1 manu1 1 02 mod2 manu2 1 03 mo

有条件地合并两个列表中的数据

表结构如下所示

MobileID   ModelID   ManufacturerID    IsApproved
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
其中IsApproved是布尔值

当新的移动条目在数据库中完成时,它会向经理申请批准,直到它的IsApproved值为0,当它获得批准时,IsApproved值将变为1

我想做如下事情

MobileID   ModelID   ManufacturerID    IsApproved
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
我正在使用下面写的第一个查询获得所有已批准手机的列表

现在的问题是,我必须根据两个条件显示所有手机

1) 如果存在具有相同modelID和manufacturerID(表示规范已更新)的移动设备,则其IsApproved字段将变为0-->不以DB为单位,而是仅用于显示)

2) 如果移动设备是新的,则其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
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

首先,让我们将您的列表缓存在内存中,以避免我们多次获取它:

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);
}
var displayMobileList=new List();
foreach(移动列表中的var mobile
.其中(m=>!displayMobileList
.Any(m2=>m2.ModelID==m.ModelID
&&m2.ManufacturerID==m.ManufacturerID)
{
显示移动列表。添加(移动);
}

首先,让我们将您的列表缓存在内存中,以避免我们多次获取它:

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);
}
var displayMobileList=new List();
foreach(移动列表中的var mobile
.其中(m=>!displayMobileList
.Any(m2=>m2.ModelID==m.ModelID
&&m2.ManufacturerID==m.ManufacturerID)
{
显示移动列表。添加(移动);
}

您的列表似乎有误“如果modelId和ManuId相同,则IsApproved=0”,但MobileId 2和MobileId 3都有相同的型号和Manu id,并且您的列表在IsApproved中显示在1处。为了更好地理解,您的列表似乎有误“如果modelId和ManuId相同,则IsApproved=0”,但是MobileId 2和MobileId 3都有相同的型号&Manu id,并且您的列表在IsApprovedI中以1的形式显示它们。我应该编辑数据以便更好地理解……它是否遗漏了什么?因为它在.Where(m=>listOfAllMobiles)给出了错误,现在试试看,不知道结果如何!它在主查询中的&&处给出错误,是指单个&[逻辑AND]运算符吗?是的,它给出以下错误是否缺少某些内容?因为它在.Where(m=>listOfAllMobiles)给出了错误,现在试试看,不知道结果如何!它在主查询中的&&处给出错误,是指单个&[逻辑AND]运算符吗?是的,它给出以下错误