Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Vb.net 如何使用LINQ从列表A和列表B中获取元素_Vb.net_Linq - Fatal编程技术网

Vb.net 如何使用LINQ从列表A和列表B中获取元素

Vb.net 如何使用LINQ从列表A和列表B中获取元素,vb.net,linq,Vb.net,Linq,如何使用LINQ从列表A和列表B中获取元素,即使列表B为空(仍将返回列表A的元素,但列表B的元素将为空) 其思想是能够基于列表a和B的元素重新创建单个匿名对象 From elemListA In data.ListA_ From elemListB In elemListA.ListB _ Select New With { _ .ElementA = elemListA.ElementA, _ .ElementB = elemListA.Element

如何使用LINQ从列表A和列表B中获取元素,即使列表B为空(仍将返回列表A的元素,但列表B的元素将为空)

其思想是能够基于列表a和B的元素重新创建单个匿名对象

From elemListA In data.ListA_
From elemListB In elemListA.ListB _
   Select New With { _
         .ElementA = elemListA.ElementA, _
         .ElementB = elemListA.ElementB, _
         .ElementC = elemListB.ElementA, _
         .elementD = elemListB.ElementB, _
   }).ToList()
问题是,如果ListB为空,它将崩溃。。另一个问题是,如果我把a放在where中,它将不包括ListA的元素,因为它们被where子句过滤掉了,我想要它们。


我想做一个连接,但问题是这两个对象之间没有关系。。除了ListA中的一个元素之外,还有一个ListB。

听起来像是一个左外连接。微软希望通过LINQ做到这一点

专门针对您的问题,您需要检查空值。在他们的示例中,如果值为null,Microsoft使用三元运算符返回空字符串

var query = from person in people
                    join pet in pets on person equals pet.Owner into gj
                    from subpet in gj.DefaultIfEmpty()
                    select new { person.FirstName, PetName = (subpet == null ?    String.Empty : subpet.Name) };

在不可能连接的情况下,获得外部连接效果非常困难。基本上,我可以看到两种方法:

  • ListB
    为空时,将
    elemListA.ListB
    替换为带有一个空(
    Nothing
    )元素的数组

    Dim数组(0)可为空(元素B)
    ...
    来自If中的elemListB(elemListA.ListB,数组)
    
  • 使用
    Union
    :首先查询包含
    ListB
    ListA
    对象,并与未包含的对象进行Union。在这两个查询中,您必须创建完全相同的匿名类型,因此在第二部分中,您必须将
    .ElementB=emptyB
    放在
    Dim emptyB
    声明为ElementB=Nothing的位置


  • 这个解决方案的问题在于你引入了。。person等于pet.Owner,这意味着你需要一个从宠物到主人的证明。在我的例子中,我没有这样的引用,也没有。我通过在第二个列表中添加一个空项来修复我的问题。因此,解决方案1对我来说很容易,并且已经被接受。谢谢