2012-07-23 2 views
0

У меня есть следующий класс, который содержит отзывы:Как я могу эффективно связать два набора данных в C#?

public class Review 
    { 
     public string PartitionKey { get; set; } 
     public string RowKey { get; set; } 
    } 

    IEnumerable<Review> review = // Filled with about 1000 reviews 

У меня также есть класс, который содержит темы:

public class Topics 
    { 
     public string PartitionKey { get; set; } 
     public string RowKey { get; set; } 
     public string Topic { get; set; } 
    } 

    IEnumerable<Topic> topic = // Filled with about 300 topics 

Первые SIX характеры RowKey в обзоре являются такими же, как RowKey в разделах. Классы разделов в обоих случаях являются пустой строкой и не используются.

У меня приблизительно 1000 записей в классе обзора и 300 записей в классе тем.

Есть хороший способ, что я могу совмещать обзор и тему с помощью LINQ, чтобы заполнить новый класс ниже:

public class ReviewGrid 
    { 
     public string PartitionKey { get; set; } // PartitionKey from Review 
     public string RowKey { get; set; } // RowKey from Review 
     public string Topic { get; set; } // This would be the Topic from Topics 
    } 

Если бы я сделать это с помощью LINQ это займет много времени, чтобы создать и там Я мог бы создать его быстрее?

ответ

1

Я думаю, что вы ищете присоединиться на PartitionKey

var reviewGrids = (from r in review 
        join t in topic on r.RowKey.Substring(0, 6) equals t.RowKey 
        select new ReviewGrid 
        { 
        r.PartitionKey, 
        r.RoWKey, 
        t.Topic, 
        }).ToList(); 
+0

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

+0

@Anne - Я обновил ответ – Aducci

0

Пытались это вы?

IEnumerable<ReviewGrid> rivewGrid = (from r in review 
            join t in topic on r.PartitionKey equals t.PartitionKey 
            select new ReviewGrid { 
             PartitionKey = r.PartitionKey, 
             RowKey = r.RowKey, 
             Topic = t.Topic 
            })AsEnumerable<ReviewGrid>(); 
+0

Спасибо Elwi. Было бы так же эффективно, как метод, предложенный LB. Я ищу что-то, что будет работать как можно быстрее. –

+0

Я писал это, когда Aducci публиковал это :), но отредактированный ответ Aduccie, я думаю, является лучшим решением для вас, Linq очень быстрый, я не знаю лучшего способа сделать это. – Elwi

0
var reviewGrid = r.Join(t, 
       x => x.PartitionKey + x.RowKey.Substring(6), 
       y => y.PartitionKey + x.RowKey, 
       (x,y)=>new { x.RowKey,x.PartitionKey,y.Topic }); 
+0

Считаете ли вы, что это будет эффективно при объединении 300 строк в таблицу 1000 строк? Я просто не уверен, что один способ более эффективен, чем другой. –

+0

@ Анне я не понимаю. О каких способах вы говорите? –

+0

Я смотрю ваше предложение, а другое - Adduci. Они выглядят по-другому, но это только синтаксис, и они будут одинаковыми внутри? У меня есть источники данных как IEnumerable <> Является ли это лучшей формой для них? –

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