Сбор данных в один объект и сортировка их в .NET / C # - PullRequest
1 голос
/ 11 мая 2011

В нашем проекте .NET / C # мы сохраняем имя / версию браузера всех пользователей, имя ОС и т. Д. В базе данных.Позже мы собираем эти данные и используем их в статистических целях.Теперь мне нужно как-то определить, например:

5 клиентов имели Windows 7 + Internet Explorer 8У 4 клиентов была Windows XP + Internet Explorer 6 и т. Д.

При получении данных из базы данных я могу определить, какая ОС и какой браузер использовались, но в случае, когда я собираю данные, как бы яполучить какой браузер и какую ОС использовали вместе и узнать количество таких платформ?Например, я буду искать Windows XP, и система покажет мне, какие браузеры используются с этой ОС и в каком количестве.

Может кто-нибудь дать подсказку?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Вам нужно посмотреть на группировку. В linq это может выглядеть примерно так:

var info = from record in records where record.OperatingSystem == "WinXp"
    group record by record.Browser into g
    select new { Browser = g.Key, Records = g };

Если вы используете что-то вроде ravendb, у вас будет очень хороший способ сделать это без сложного несоответствия импеданса, который по неосторожности приносит SQL RDBMS. Это означает, что вы можете запросить его напрямую с помощью этого linq.

НТН

2 голосов
/ 11 мая 2011

Похоже, идеально подходит для оператора GROUP BY (если вы используете SQL), или метод Linq GroupBy() (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby.aspx), если вы хотите остаться в .NET.

Например, в SQL:

SELECT COUNT(*), OS, BROWSER
FROM YOURTABLE
GROUP BY OS, BROWSER

Или в Linq:

var groups = from yt in yourtable
             group yt by new { yt.OS, yt.BROWSER } into ytgroup
             select new { key = ytgroup.key, groups = ytgroup };

Отсюда у вас будет набор групп, из которых вы затем сможете получить счетчики..

1 голос
/ 11 мая 2011

Создать Dictionary<string, int> d;

Пусть ваш ключ будет строкой, такой как «Windows 7 + Internet Explorer 8» или «Windows XP + Internet Explorer 6». Вероятно, у вас будет готов рутина генерации ключей.

Сделайте это:

foreach (CollectedDataItem item in CollectedData)
{
    string key=generateKeyFromItem(item);
    if (!d.HasKey(key)) {
         d.Add(key, 1);
    }
    else {
         d[key]++;
    }
}

И, наконец,

string generateKeyFromItem(CollectedDataItem Item)
{
    return Item.OS+" "+Item.Browser;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...