Как использовать запрос LINQ для получения значений XElement, когда XElements имеют то же имя

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

Отключение кнопки отправки не очень хорошее решение, так как люди могут отключить JavaScript или делать другие странные вещи. Проверка на стороне клиента - хорошее начало, но ее всегда следует подкреплять обработкой на стороне сервера.

8
задан JohnC 21 May 2009 в 21:09
поделиться

8 ответов

Вам нужна эта помощь?

var a = from record in table.Elements("Record")
    select new
    {
        one = (string)record.Elements().ElementAt(0),
        two = (string)record.Elements().ElementAt(1)
    };
10
ответ дан 5 December 2019 в 11:26
поделиться

Похоже, вы хотите денормализовать поле, чтобы оно поместилось в 1 столбец в вашей сетке данных.

Помогает ли следующее?

var table = XElement.Parse(@"<Table>
                                <Record><Field>Value1_1</Field><Field>Value1_2</Field></Record>
                                <Record><Field>Value2_1</Field><Field>Value2_2</Field></Record>
                             </Table>");


var temp = from record in table.Elements("Record")
           from field in record.Elements("Field")
           group field.Value by record into groupedFields
           select groupedFields.Aggregate((l, r) => l + ", " + r);

foreach (var row in temp)
    Console.WriteLine(row);

Console.ReadKey();

Отказ от ответственности: я мало что делаю SQL или LINQ больше, так что это, вероятно, можно было бы улучшить. Вы можете изменить его.

3
ответ дан 5 December 2019 в 11:26
поделиться

Вы можете связать вызовы к Elements () :

var temp = from field in table.Elements("Record").Elements("Field")
           select field.Value;

Вы также можете использовать Descendants () :

 var temp = from field in table.Descendants("Field")
            select field.Value;

Однако это вернет все элементы в

, даже если они не входят в элемент .

0
ответ дан 5 December 2019 в 11:26
поделиться

Вам потребуется двухэтапный процесс:

Аннотируйте записи (вместо атрибутов), а затем Перечислите поля и передайте значения в анонимный класс для привязки, например:

string xml = [string-goes-here];

  XElement elem = XElement.Parse(xml);

  int count= 0;
  foreach(XElement recordElems in elem.Elements("Record")){
    recordElems.SetAttributeValue("id", count);
    count++;
  }
  var temp = from record in elem.Elements("Record")
             from field in record.Elements("Field")
             select new { Record = "Record " + record.Attribute("id").Value, Field = field.Value };

  foreach (var item in temp)
  {
    Console.WriteLine("{0}: {1}", item.Record, item.Field);
  }
}
0
ответ дан 5 December 2019 в 11:26
поделиться

Возможно, я далек от того, что вы ищете, но вы ищете что-то вроде этого?

        DataSet ds = new DataSet("Records DS");
        ds.Tables.Add("Records");
        foreach (XElement record in table.Descendants("Record"))
        {
            var temp = from r in record.Descendants("Field")
                       select r.Value;

            string[] datum = temp.ToArray();
            if (datum != null
                && datum.Length > 0)
            {
                foreach (string s in datum)
                    ds.Tables[0].Columns.Add();
                DataRow row = ds.Tables[0].NewRow();
                row.ItemArray = datum;
                ds.Tables[0].Rows.Add(row);
            }
        }

Затем верните ds и установите DataMember - «Записи»

0
ответ дан 5 December 2019 в 11:26
поделиться

Э ... Я думаю, вы используете неправильную парадигму LINQ для решения этой проблемы. Вам следует использовать LINQ to XML, который, возможно, немного отличается от ожидаемого.

Посмотрите эту ссылку:

http://msdn.microsoft.com/en-us/library/bb308960.aspx

Он объясняет это на примере, структурно похожем на тот, который вы представили.

0
ответ дан 5 December 2019 в 11:26
поделиться

Подойдет ли

IEnumerable<List<string>>

? (не знаю, как сделать так, чтобы это отображалось в строке)

var recordList = from record in data.Elements("record") select record;
List<List<string>> x = new List<List<string>>(recordList.Count());
foreach (var record in recordList)
{
  var z = from field in record.Elements("field") select field.Value;
  x.Add(z.ToList());
}
return x.AsEnumerable();

Не знаю, работает ли это для вашего конкретного сценария или нет.

0
ответ дан 5 December 2019 в 11:26
поделиться

var detail1 = from d в ds.tbl_Looking_Fors где d.Profile_ID == id выберите d.Looking_For;

            string[] datum = detail1.ToArray();
            if (datum != null && datum.Length > 0)
            {
                foreach (var row in datum)
                {
                    Label6.Text = datum[0]+" , "+datum[1];
                }

            }
0
ответ дан 5 December 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: