Linq连接多个键,键的一侧为空

osh3o9ms  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(198)

试图联接两个表,其中一边的键的一部分可以为空。得到“类型参数不能从用法中推断”,我相信这与键中不匹配的类型有关。

TableA.GroupJoin(TableB,
  a => new {a.IntKeyA, a.StringKeyA},
  b => new {b.NullIntKeyB, b.StringKeyB}
 (tabA, tabB) => new {tabA, tabB});

尝试强制转换TableA中的键的类型

a => new (int?, string) {a.IntKeyA, a.StringKeyA}

a => (int?, string)(new  {a.IntKeyA, a.StringKeyA})

尝试合并TableB中的键,幻数0不是很好,但在这种情况下可以工作。

b => new {b.NullIntKeyB ?? 0, b.StringKeyB}

已尝试获取值或默认值

b => new {b.NullIntKeyB.GetValueOrDefault(), b.StringKeyB}

我想我可能会定义一个类来保存键,但我真的不想每次出现这个问题时都这样做。

sr4lhrrt

sr4lhrrt1#

就目前而言,这似乎已经奏效,但我还不打算把它标记为答案,希望有一个更容易的方法。

class ReportKey
{
    private int? IntKey { get; }
    private string StringKey { get; } = string.Empty;
   
    internal ReportKey(int? intKey, string stringKey)
    {
        IntKey = intKey;
        StringKey = stringKey;
    }
    
    public override bool Equals(object obj)
    {
        var item = obj as ReportKey;
    
        if (item == null) return false;
    
        return this.IntKey == item.Intkey &&
           StringKey == item.StringKey;
    }
    
    public override int GetHashCode()
    {
        return $"{IntKey}{StringKey}".GetHashCode();
    }
}

...

TableA.GroupJoin(TableB,
    a => new ReportKey(a.IntKeyA, a.StringKeyA),
    b => new ReportKey(b.NullIntKeyB, b.StringKeyB),
   (tabA, tabB) => new {tabA, tabB});

相关问题