私はリストに変換した2つのExcelファイルを持っています。 1番目のファイルには、必要なすべてのアイテムの完全なリストがあります。ただし、2番目のリストには、最初のリストで変更する必要がある項目の小さなリストがあります。2つのLINQ辞書を1つに結合するには?
IEnumerable<ExcelRow> queryListA = from d in datapullList
select new ExcelRow
{
Company = d.GetString(0),
Location = d.GetString(1),
ItemPrice = d.GetString(4),
SQL_Ticker = d.GetString(15)
};
第二のリストは非常によく似た方法で構築されています:
IEnumerable<ExcelRow> queryListB = from dupes in dupespullList
select new ExcelRow
{
Company = d.GetString(0),
Location = d.GetString(1),
NewCompany = d.GetString(4)
};
だから、同社が一致した第一のリスト内の特定の場所からが存在する場合 は、ここに私の第一のリストが構築される方法です2番目のリストの場合、会社は新会社名に変更されます。
次に、最終リストには1番目のリストのすべてが含まれている必要がありますが、2番目のリストから指定された変更があります。
私はこれで数日間は苦労しました。詳細が必要な場合はお知らせください。
[更新:]私はLINQとC#でかなり新しいです。私はこのコードをOffice 2003のExcelリーダーに関するWeb上で見つけました。上記のすべてのクラスから1つのリストを作成するにはどうすればよいですか? マイExcelRowクラス:
class ExcelRow
{
List<object> columns;
public ExcelRow()
{
columns = new List<object>();
}
internal void AddColumn(object value)
{
columns.Add(value);
}
public object this[int index]
{
get { return columns[index]; }
}
public string GetString(int index)
{
if (columns[index] is DBNull)
{
return null;
}
return columns[index].ToString();
}
public int Count
{
get { return this.columns.Count; }
}
}
マイExcelProviderクラス:
class ExcelProvider : IEnumerable<ExcelRow>
{
private string sheetName;
private string filePath;
private string columnName1;
private string columnName2;
private List<ExcelRow> rows;
public ExcelProvider()
{
rows = new List<ExcelRow>();
}
public static ExcelProvider Create(string filePath, string sheetName, string columnName1, string columnName2)
{
ExcelProvider provider = new ExcelProvider();
provider.sheetName = sheetName;
provider.filePath = filePath;
provider.columnName1 = columnName1;
provider.columnName2 = columnName2;
return provider;
}
private void Load()
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties= ""Excel 8.0;HDR=YES;IMEX=1""";
connectionString = string.Format(connectionString, filePath);
rows.Clear();
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
try
{
conn.Open();
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = string.Format("SELECT * FROM [{0}$] WHERE {1} IS NOT NULL AND {2} <> \"{3}\"", sheetName, columnName1, columnName2, null);
using (OleDbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
ExcelRow newRow = new ExcelRow();
for (int count = 0; count < reader.FieldCount; count++)
{
newRow.AddColumn(reader[count]);
}
rows.Add(newRow);
}
}
}
}
catch (Exception ex)
{ throw ex; }
finally
{
if (conn.State == System.Data.ConnectionState.Open)
conn.Close();
}
}
}
public IEnumerator<ExcelRow> GetEnumerator()
{
Load();
return rows.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
Load();
return rows.GetEnumerator();
}
}
だから、すべてこのロジックを使用して、どのように私は私の問題を解決することができますか?
私はOPは同様に場所の一致を求めていると思う:「だから、会社が特定の場所から**がある場合**第二に一致する第一のリストでは、新しい会社名 " – Joey
に変更されます。そうです、それは私が必要とするものです。 @ Joeyの説明をありがとう。 –