このサイトの質問を調べましたが、特定の問題に一致するものが見つかりませんでした。
私が次のものを持っていると仮定します:
Product[] store1 = { new Product { Name = "apple", Code = 9, Code1="1" },
new Product { Name = "orange", Code = 4 } };
Product[] store2 = { new Product { Name = "apple", Code = 9, Code2="2" },
new Product { Name = "lemon", Code = 12 } };
と:
public class Product : IEquatable<Product>
{
public string Name { get; set; }
public int Code { get; set; }
public string Code1 { get; set; }
public string Code2 { get; set; }
public bool Equals(Product other)
{
//Check whether the compared object is null.
if (Object.ReferenceEquals(other, null)) return false;
//Check whether the compared object references the same data.
if (Object.ReferenceEquals(this, other)) return true;
//Check whether the products' properties are equal.
return Code.Equals(other.Code) && Name.Equals(other.Name);
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public override int GetHashCode()
{
//Get hash code for the Name field if it is not null.
int hashProductName = Name == null ? 0 : Name.GetHashCode();
//Get hash code for the Code field.
int hashProductCode = Code.GetHashCode();
//Calculate the hash code for the product.
return hashProductName ^ hashProductCode;
}
}
一致した場合に store2 のデータで上書きされ、一致しない場合に store2 から store1 に挿入された store1 のデータを含む単一の Enumerable を返すにはどうすればよいですか。基本的に、TSQL Merge ステートメントに相当する C# を探しています。
これを実行する日の最後に:
foreach (var product in union)
Console.WriteLine(product.Name + " " + product.Code + " " + product.Code1 + " " + product.Code2);
戻りたい:
りんご 9 1 2
オレンジ 4
レモン 12
ただし、これを実行すると:
IEnumerable<Product> union = store1.Union(store2);
私は得る:
りんご 9 1
オレンジ 4
レモン 12
そして、これを実行すると:
IEnumerable<Product> union = store1.Concat(store2);
私は得る:
りんご 9 1
オレンジ 4
アップル 9 2
レモン 12
助けてくれてありがとう。