Инициализатор UIImagePNGRepresentation
принимает экземпляр UIImage
, а не Data
, поэтому замените
if let imageData = UIImagePNGRepresentation(image.pngData()) {
на
if let imageData = UIImagePNGRepresentation(image) {
ИЛИ лучше используйте последнюю версию Путь
if let imageData = image.pngData() {
Можно использовать Linq для Наборов данных. Проверьте это. Что-то вроде этого:
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
List<DataRow> rows = new List<DataRow>();
DataTable contact = ds.Tables["Contact"];
// Get 100 rows from the Contact table.
IEnumerable<DataRow> query = (from c in contact.AsEnumerable()
select c).Take(100);
DataTable contactsTableWith100Rows = query.CopyToDataTable();
// Add 100 rows to the list.
foreach (DataRow row in contactsTableWith100Rows.Rows)
rows.Add(row);
// Create duplicate rows by adding the same 100 rows to the list.
foreach (DataRow row in contactsTableWith100Rows.Rows)
rows.Add(row);
DataTable table =
System.Data.DataTableExtensions.CopyToDataTable<DataRow>(rows);
// Find the unique contacts in the table.
IEnumerable<DataRow> uniqueContacts =
table.AsEnumerable().Distinct(DataRowComparer.Default);
Console.WriteLine("Unique contacts:");
foreach (DataRow uniqueContact in uniqueContacts)
{
Console.WriteLine(uniqueContact.Field<Int32>("ContactID"));
}
Как я могу удалить дублирующиеся строки?. (Скорректируйте запрос там для присоединения на 4 столбцах ключа),
Править: с Вашей новой информацией я полагаю, что самый легкий путь состоял бы в том, чтобы реализовать IEqualityComparer <T> и использование, Отличное на Ваших строках данных. Иначе, если Вы работаете с IEnumerable/IList вместо DataTable/DataRow, это, конечно, возможно с некоторым кун-фу LINQ к объектам.
Править: пример IEqualityComparer
public class MyRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
return (x.Field<int>("ID") == y.Field<int>("ID")) &&
string.Compare(x.Field<string>("Name"), y.Field<string>("Name"), true) == 0 &&
... // extend this to include all your 4 keys...
}
public int GetHashCode(DataRow obj)
{
return obj.Field<int>("ID").GetHashCode() ^ obj.Field<string>("Name").GetHashCode() etc.
}
}
Можно использовать его как это:
var uniqueRows = myTable.AsEnumerable().Distinct(MyRowComparer);
Если у Вас есть доступ к Linq, я думаю, что необходимо смочь использовать созданный в функциональности группы на в наборе памяти и выбрать дублирующиеся строки
Поисковый Google для Linq Group для примеров
Ответ Liggett78 намного лучше - особенно, поскольку шахта имела ошибку! Исправление следующим образом...
DELETE TableWithDuplicates
FROM TableWithDuplicates
LEFT OUTER JOIN (
SELECT PK_ID = Min(PK_ID), --Decide your method for deciding which rows to keep
KeyColumn1,
KeyColumn2,
KeyColumn3,
KeyColumn4
FROM TableWithDuplicates
GROUP BY KeyColumn1,
KeyColumn2,
KeyColumn3,
KeyColumn4
) AS RowsToKeep
ON TableWithDuplicates.PK_ID = RowsToKeep.PK_ID
WHERE RowsToKeep.PK_ID IS NULL
Найденный этим на bytes.com:
Можно использовать провайдер OLE DB Jet 4.0 с классами в Системе. Данные. Пространство имен OleDb для доступа к файлу разделенного текста запятой (использующий Набор данных/Таблицу данных).
Или Вы могли использовать текстовый Драйвер Microsoft для ODBC с классами в Системе. Данные. Пространство имен Odbc для доступа к файлу с помощью драйверов ODBC.
Это позволило бы Вам получать доступ к своим данным с помощью запросов SQL как предложенные другие.
Используйте запрос вместо функций:
DELETE FROM table1 AS tb1 INNER JOIN
(SELECT id, COUNT(id) AS cntr FROM table1 GROUP BY id) AS tb2
ON tb1.id = tb2.id WHERE tb2.cntr > 1
"Эта таблица данных создается путем чтения файла CSV а не от DB".
Таким образом поместите ограничение на уникальность данных на четыре столбца в базе данных, и вставляет, которые являются дубликатами при Вашем дизайне, не войдет. Если это не решает перестать работать вместо того, чтобы продолжиться, когда это происходит, но это, конечно, настраивается в Вашем сценарии импорта CSV.
Это очень простой код, который не требует linq или отдельных колонок для фильтра. Если все значения столбцов в строке равны null, она будет удалена.
public DataSet duplicateRemoval(DataSet dSet)
{
bool flag;
int ccount = dSet.Tables[0].Columns.Count;
string[] colst = new string[ccount];
int p = 0;
DataSet dsTemp = new DataSet();
DataTable Tables = new DataTable();
dsTemp.Tables.Add(Tables);
for (int i = 0; i < ccount; i++)
{
dsTemp.Tables[0].Columns.Add(dSet.Tables[0].Columns[i].ColumnName, System.Type.GetType("System.String"));
}
foreach (System.Data.DataRow row in dSet.Tables[0].Rows)
{
flag = false;
p = 0;
foreach (System.Data.DataColumn col in dSet.Tables[0].Columns)
{
colst[p++] = row[col].ToString();
if (!string.IsNullOrEmpty(row[col].ToString()))
{ //Display only if any of the data is present in column
flag = true;
}
}
if (flag == true)
{
DataRow myRow = dsTemp.Tables[0].NewRow();
//Response.Write("<tr style=\"background:#d2d2d2;\">");
for (int kk = 0; kk < ccount; kk++)
{
myRow[kk] = colst[kk];
// Response.Write("<td class=\"table-line\" bgcolor=\"#D2D2D2\">" + colst[kk] + "</td>");
}
dsTemp.Tables[0].Rows.Add(myRow);
}
} return dsTemp;
}
Это можно использовать даже для удаления нулевых данных из листа excel.