2015-05-14 3 views
1

Я имею дело с linq-to-entity, запрашивая 2 разных объекта. Один возвращает data и другие возвращается addValues, также у меня есть ссылки на обоих NewtonSoft.Json и System.Data.Objets: var query1 возвращается data и var query2 возвращается addValues. Отладка я могу видеть, что:Как подключиться и выполнить операцию между данными JSON в C#?

data = [{"key":"tf","value":221},{"key":"ba","value":108}]; 

addValues = [{"key":"tf","value":2},{"key":"ba","value":1.5}]; 

Как получить новую строку/объект присоединения к нему «ключ» и выполнение операции между значениями из данных и addValues ​​? Результат запроса должен быть calculatedResult.

result = [{"key":"tf","value":221+2},{"key":"ba","value":108+1.5}]; 

calculatedResult = [{"key":"tf","value":223},{"key":"ba","value":109.5}]; 

Важное примечание: я могу быть уверен, что оба массива будут иметь одинаковое число элементов, но не по заказу key

+2

ли '' data' и addValues' сильно типизированных? Поскольку это довольно сложно ответить на ваш вопрос, потому что то, что вы опубликовали, не является допустимым C#, мы понятия не имеем о типе (типах), с которым вы имеете дело. –

+0

Извините, что @CraigW. На самом деле это строковое представление объектов JSON. Они хранятся в виде строк в БД. 'key' является строкой и' значение' является десятичным – nlopedebarrios

+0

Любые конкретные причины, по которым вам необходимо сохранить его как JSON в базе данных? То, что вы спрашиваете, становится тривиальным, если оно хранится «нормально» –

ответ

1

Следующий фрагмент кода будет работать, при условии, что каждый элемент в data и addValues имеет как поля key, так и value.

public class Foo 
{ 
    public string key; 
    public float value; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var data = "[{\"key\":\"tf\",\"value\":221},{\"key\":\"ba\",\"value\":108}]"; 
     var addValue = "[{\"key\":\"tf\",\"value\":2},{\"key\":\"ba\",\"value\":1.5}]"; 

     var obj1 = JsonConvert.DeserializeObject<List<Foo>>(data); 
     var obj2 = JsonConvert.DeserializeObject<List<Foo>>(addValue); 
     var new_obj = (from a in obj1 
         from b in obj2 
         where a.key == b.key 
         select new Foo { key = a.key, value = a.value + b.value }).ToList(); 
     Console.WriteLine(JsonConvert.SerializeObject(new_obj, Formatting.Indented)); 

    } 
} 

Выход:

[ 
    { 
    "key": "tf", 
    "value": 223.0 
    }, 
    { 
    "key": "ba", 
    "value": 109.5 
    } 
] 
+0

Я думаю, что это сработает @ Марк Сигал, спасибо! Я редактировал вопрос для разъяснения, когда вы отправили свой ответ. Я дам Вам знать – nlopedebarrios