in reference-implementations/semantic-search-for-images/src/ingestion/Services/CsvService.cs [31:75]
public IList<ImageMetadata> GetRecords(MemoryStream memoryStream) {
var imageMetadataList = new List<ImageMetadata>();
using (var reader = new StreamReader(memoryStream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
using (var dr = new CsvDataReader(csv))
{
var dt = new DataTable();
dt.Load(dr);
ValidateTable(dt.Columns);
var metadataColumns = dt.Columns.Cast<DataColumn>()
.Where(x => string.Compare(x.ColumnName, Constants.DATA_TABLE_COLUMN_NAME_OBJECT_ID, StringComparison.OrdinalIgnoreCase) != 0
&& string.Compare(x.ColumnName, Constants.DATA_TABLE_COLUMN_NAME_IMAGE_URL, StringComparison.OrdinalIgnoreCase) != 0
&& string.Compare(x.ColumnName, Constants.DATA_TABLE_COLUMN_NAME_ARTIST, StringComparison.OrdinalIgnoreCase) != 0
&& string.Compare(x.ColumnName, Constants.DATA_TABLE_COLUMN_NAME_TITLE, StringComparison.OrdinalIgnoreCase) != 0
&& string.Compare(x.ColumnName, Constants.DATA_TABLE_COLUMN_NAME_CREATION_DATE, StringComparison.OrdinalIgnoreCase) != 0)
.ToList();
foreach(DataRow row in dt.Rows)
{
var imageMetadata = new ImageMetadata(
SafeGetValue(row, Constants.DATA_TABLE_COLUMN_NAME_OBJECT_ID),
SafeGetValue(row, Constants.DATA_TABLE_COLUMN_NAME_IMAGE_URL),
SafeGetValue(row, Constants.DATA_TABLE_COLUMN_NAME_ARTIST),
SafeGetValue(row, Constants.DATA_TABLE_COLUMN_NAME_TITLE),
SafeGetValue(row, Constants.DATA_TABLE_COLUMN_NAME_CREATION_DATE),
new Dictionary<string, string>()
);
foreach(var metadataColumn in metadataColumns)
{
imageMetadata.metadata.Add(metadataColumn.ColumnName, row[metadataColumn.ColumnName].ToString()!);
}
imageMetadataList.Add(imageMetadata);
}
}
}
return imageMetadataList;
}