LINQ 包含带有 List的语法

发布于 2024-10-29 22:36:13 字数 672 浏览 1 评论 0原文

我有一个通过 HTTP post 发布到 *.aspx 页面的 ID 列表。在服务器上,我尝试将该列表与对象列表进行比较,以查看哪些对象的 PrimaryKey ID 字段在发布的 id 中丢失(也称为删除),以及列表中没有相应对象的 id(添加)。这是我获取删除的 LINQ:

List<string> ids = new List<string>(txtParticipants.Value.Split(','));
List<NetworkEvent> deletes = e.NetworkEvent.Where(c =>
      !ids.Contains(c.NetworkID.ToString())).ToList<NetworkEvent>();

这个删除查询工作正常。我的问题是生成相反的内容,即添加。这是我的尝试(我需要帮助)。问题是如何在 Contains() 谓词中引用列表中的字符串?显然 c 本身是错误的,但我如何引用它呢?

List<string> adds = newids.Where( c=> (e.NetworkEvent.Select
    (z=> z.NetworkID ).Contains( int.Parse(c) ));

希望我的问题有意义(?!)。谢谢。

I have a List of ids posted with an HTTP post to an *.aspx page. On the server I'm trying to compare that list to a List of objects to see which objects have their PrimaryKey ID field missing from the posted ids (aka deletes) and ids from the List that have no corresponding objects (adds). Here's my LINQ to get the deletes:

List<string> ids = new List<string>(txtParticipants.Value.Split(','));
List<NetworkEvent> deletes = e.NetworkEvent.Where(c =>
      !ids.Contains(c.NetworkID.ToString())).ToList<NetworkEvent>();

This query for the deletes is working fine. My problem is generating the converse, the adds. Here's my attempt (that I need help with). The question is how do I reference the string from the List in the Contains() predicate? Obviously c by itself is wrong but how to I reference it?

List<string> adds = newids.Where( c=> (e.NetworkEvent.Select
    (z=> z.NetworkID ).Contains( int.Parse(c) ));

Hopefully my question makes sense (?!). thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮世清欢 2024-11-05 22:36:13

尝试:

var itemsAlreadyAdded = new int[] { 2, 4, 6 };
var newIds = new string[] { "2", "3" };

var itemsToAdd = newIds.Except(itemsAlreadyAdded.Select(iaa => iaa.ToString()));

foreach (var item in itemsToAdd)
{
    Console.WriteLine(item);
}

Console.ReadLine();

Try:

var itemsAlreadyAdded = new int[] { 2, 4, 6 };
var newIds = new string[] { "2", "3" };

var itemsToAdd = newIds.Except(itemsAlreadyAdded.Select(iaa => iaa.ToString()));

foreach (var item in itemsToAdd)
{
    Console.WriteLine(item);
}

Console.ReadLine();
酒几许 2024-11-05 22:36:13

您可以尝试:

List<string> adds = newids.Where(id => !e.NetworkEvent.Any(e => e.NetworkID.ToString() == id)).ToList();

You can try:

List<string> adds = newids.Where(id => !e.NetworkEvent.Any(e => e.NetworkID.ToString() == id)).ToList();
全部不再 2024-11-05 22:36:13

对于删除,您可以像刚才一样使用“!Contains”。

对于添加,只需使用相同的表达式,但相反(即颠倒两个列表)。

换句话说:列表#1!包含列表#2 ==> 中的内容

  • 列表 #2 中的项目从列表 #1 中删除,或者
  • 列表 #2 中的项目被插入到列表 #1

因此,您会看到相同的表达式具有镜像含义。

您还可以使用 !Exists 或 !Any 代替 !Contains。

For deletes, you can use "!Contains" as you just did.

For additions, just use the same expression, but in reverse (i.e. reverse the two lists).

In other words: list #1 !Contains things in list #2 ==>

  • item in list #2 deleted from list #1, or
  • item in list #2 to be inserted to list #1

So you see the same expression has mirror meanings.

You can also use !Exists or !Any in place of !Contains.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文