Существует проблема с ними подлых исключений из блоков выгоды попытки посредством задержанного выполнения.
, например:
var l = new List<int>() {1, 2, 3};
try
{
l.Select(x => x / 0);
}
catch
{
// error
}
l.elementAt(0); // exception occurs here outside of the try catch
, Который может быть хитрым в первый раз, Вы сталкиваетесь с ним, тем более, что отладчик укажет на Вас на код в выгоде попытки.
Иначе я нахожу их невероятно полезными и очень экономящими время.
Вы можете добиться желаемого, группируя по IP-адресу, но тогда вам нужно знать, как вы хотите обрабатывать другие поля, если у вас есть дубликаты.
var query = from row1 in table.AsEnumerable()
let time = row1.Field<DateTime>("time")
let uri = row1.Field<string>("cs-uri-stem")
let ip = row1.Field<string>("c-ip")
let questionid = row1.Field<int>("questionid")
where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
group by ip into g
select new
{
time = g.time.First(),
uri = g.uri.First(),
ip = g.Key,
questionid = g.questionid.First()
};
Вы можете выполнить Отдельное
только для всех выбранных вами полей, а не только для одного поля (какие значения вы бы использовали для других полей?).
Вы можно добиться этого с помощью метода расширения Distinct
:
var query = (from row1 in table.AsEnumerable()
let time = row1.Field<DateTime>("time")
let uri = row1.Field<string>("cs-uri-stem")
let ip = row1.Field<string>("c-ip")
let questionid = row1.Field<int>("questionid")
where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
select new
{
time,
uri,
ip,
questionid
}).Distinct();
Вы также можете использовать Distinct ()
с компаратором равенства (т. Е. Передать метод, который будет сравнивать значение IP и игнорировать остальные). Но как спрашивает Тванфоссон, как правильно обрабатывать повторяющиеся значения?