gpt4 book ai didi

c# - 无法执行 not-in

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:09 24 4
gpt4 key购买 nike

我有两个对象,一个 AnotherList包含一个整数数组和另一个 MyFolder包含对象数组 FolderItem包含对象数组 ItemKeyword有两个字符串(以键值对样式)。

我想返回一个 List<FolderItem>来自 MyFolder,在 AnotherList 中引用。我可以获得列表中的项目列表,并在底部包含了该项目的 Linq。

我一直在和. Contains.Except一整天都在扩展,但不断出错。我希望这对某人来说很容易。

在这种情况下,代码可以说出一千个单词,所以就在这里。

最后的 Linq 查询只返回一个 FolderItem此刻folderItemID=25 .

我需要它返回所有 FolderItems folderItemID=26,27,28相反。

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;

namespace temp
{
class MyFolder
{
public FolderItem[] items { get; set; }
}

class FolderItem
{
public int folderItemID { get; set; }
public ItemKeyword[] keywords { get; set; }
}

class ItemKeyword
{
public string key { get; set; }
public string value { get; set; }
}

class AnotherList
{
public AnotherListItem[] items { get; set; }
}

class AnotherListItem
{
public int dataID { get; set; }
}




public class TestingClass
{

public static void mainApp()
{
AnotherList List1 = new AnotherList()
{
items = new AnotherListItem[]{
new AnotherListItem(){dataID=1},
new AnotherListItem(){dataID=2},
new AnotherListItem(){dataID=3}
}};

MyFolder List2 = new MyFolder()
{
items = new FolderItem[]
{
new FolderItem()
{
folderItemID=25, keywords= new ItemKeyword[]
{
new ItemKeyword(){key="dataID", value="1"},
new ItemKeyword(){key="description", value="some text"},
}
},
new FolderItem()
{
folderItemID=26, keywords= new ItemKeyword[]
{
new ItemKeyword(){key="dataID", value="4"},
new ItemKeyword(){key="description", value="some other text"},
}
},
new FolderItem()
{
folderItemID=27, keywords= new ItemKeyword[]
{
new ItemKeyword(){key="dataID", value="9"},
new ItemKeyword(){key="description", value="even more other text"},
}
},
new FolderItem()
{
folderItemID=28, keywords= new ItemKeyword[]
{
new ItemKeyword(){key="dataID", value="12"},
new ItemKeyword(){key="description", value="3"},
}
}
}};

List<FolderItem> res = (from someItems in List2.items
from itemKeywords in someItems.keywords
join otherItems in List1.items on itemKeywords.value equals otherItems.dataID.ToString()
where itemKeywords.key == "dataID"
select someItems).ToList<FolderItem>();

}
}

}

最佳答案

首先抓取所有我们不需要的 ID 并将它们粘贴到一个集合中以便快速搜索:

var badIDs = new HashSet<int>(List1.items.Select(item => item.dataID));

然后获取所有未包含在该集合中的文件夹:

var goodFolders = List2.items.Where(folder => 
!badIDs.Contains(folder.folderItemID));

关于c# - 无法执行 not-in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20707594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com