2016-12-29 6 views
0

Я пытаюсь загрузить файлы на сервере (PDF) в зависимости от их времени обновления (сохранено в базе данных). Перед загрузкой я хочу сравнить их с существующим списком файлов на локальном компьютере. Проблема в сравнении полей объектов дает неправильный вывод.Сравнение двух объектов Список <Items> в C# UWP

Оба файла являются файлами на основе json, проанализированными ниже при заданном объекте «ITEMS». Я использую Visual Studio 2015 с C#. Backend - Laravel REST.

class Items 
{ 
    public int id { get; set; } 
    public string branch { get; set; } 
    public string item { get; set; } 
    public string link { get; set; } 
    public int active { get; set; } 
    public string created_at { get; set; } 
    public string updated_at { get; set; } 
} 

Это, как я разбор сервера и локальный список (как JSON):

for (int i = 0; i < obj.Count; i++) 
{ 
    JObject row = JObject.Parse(obj[i].ToString()); 
    Items newItem = new Items(); 
    newItem.id = int.Parse(row["id"].ToString()); 
    newItem.branch = row["branch"].ToString(); 
    newItem.item = row["item"].ToString(); 
    newItem.link = row["link"].ToString(); 
    newItem.created_at = row["created_at"].ToString(); 
    newItem.updated_at = row["updated_at"].ToString(); 
    files.Add(newItem); 
} 

Я использую цикл Еогеаспа, чтобы проверить, если поле updated_at равно или не

// Compare files 

foreach (Items item in files) 
{ 
    foreach(Items it in filesToDownload) 
    { 
     if (!it.updated_at.Equals(item.updated_at)) 
     { 
     //Download the file 
     //Create a new list of files to download 
     } 
    } 
} 

ответ

1
for (int i = 0; i < obj.Count; i++) 
{ 
    JObject row = JObject.Parse(obj[i].ToString()); 
    Items newItem = new Items(); 
    newItem.id = int.Parse(row["id"].ToString()); 
    newItem.item = row["branch"].ToString(); 
    newItem.link = row["item"].ToString(); 
    newItem.item = row["link"].ToString(); 
    newItem.item = row["created_at"].ToString(); 
    newItem.item = row["updated_at"].ToString(); 
    files.Add(newItem); 
} 

Вы установки item свойства для всех переменных.

Try:

for (int i = 0; i < obj.Count; i++) 
{ 
    JObject row = JObject.Parse(obj[i].ToString()); 
    Items newItem = new Items(); 
    newItem.id = int.Parse(row["id"].ToString()); 
    newItem.branch = row["branch"].ToString(); 
    newItem.item = row["item"].ToString(); 
    newItem.link = row["link"].ToString(); 
    newItem.created_at = row["created_at"].ToString(); 
    newItem.updated_at = row["updated_at"].ToString(); 
    files.Add(newItem); 
} 
+0

yep. исправленный. –

0

Я думаю, что вы просто скопировали + вставили слишком много ... =)

for (int i = 0; i < obj.Count; i++) 
{ 
    JObject row = JObject.Parse(obj[i].ToString()); 
    Items newItem = new Items(); 
    newItem.id = int.Parse(row["id"].ToString()); 
    newItem.item = row["branch"].ToString(); 
    newItem.link = row["item"].ToString(); 
    newItem.item = row["link"].ToString(); 
    newItem.item = row["created_at"].ToString(); 
    newItem.item = row["updated_at"].ToString(); 
    files.Add(newItem); 
} 

Несколько раз повторялось newItem.item.

+1

Спасибо. Исправленный. Это была ошибка при копировании в stackoverflow. –

1

Если списки действительно compareable и они имеют точно такой же формат, для сказать item.updated_at C# дает возможность сравнивать списки «родной» с помощью функций Intersect или за исключением;

Имейте в виду, что программа не проверяет плавность, поэтому, если вы считаете, что правильно поняли ее с помощью массивов и все еще получаете неправильные результаты, я бы начал с проверки данных, если это может быть проблемой ,

Потому что кажется, что петли foreach будут делать то же самое, что и Intersect и Except do.

Начать отладку циклов и использовать Expression-Checker (или простой, например OzCode), чтобы сравнить списки самостоятельно.

Также я являюсь поклонником сравнения идентификаторов вместо использования метки времени. Если они совместимы.

Две полезные ссылки:

Intersect Two Lists in C#

The opposite of Intersect()

+0

Эти лямбда-выражения слишком сложны для меня. Поэтому я пытаюсь сделать цикл foreach. Спасибо за вашу помощь. –

+0

Можете ли вы помочь мне написать этот фрагмент кода? –

Смежные вопросы