4 Stimmen

LINQ-Abfrage auf eine Liste von Object[]-Arrays

Ich habe eine Liste von Objekt-Arrays (Liste), die ich in eine DLL-Funktion übergeben werde, um PDF-Steuerelemente anzuwenden. Der erste Index jedes Objekts soll angeben, was das Steuerelement sein wird. Ich frage mich, ob es eine Möglichkeit gibt, meine Liste von Objekten abzufragen, um eine Zählung jedes der identifizierenden Objekte zu erhalten und sie in einen int zu verwandeln. Hier ist ein Beispiel für das, was ich zu tun versuche ...

        List<Object[]> controlsList = new List<Object[]>();

        //Textfield = 1
        //Checkbox = 2
        Object[] control1 = new Object[] { 1, 1, 1, 75, 75, "txtField1", 1, 8, 10};
        Object[] control2 = new Object[] { 1, 1, 1, 144, 144, "txtField2", 1, 10, 15};
        Object[] control3 = new Object[] { 2, 1, 1, 50, 50, "checkYESNOy", 1, "Yes", "grpYesNo"};
        Object[] control4 = new Object[] { 2, 1, 1, 50, 50, "checkYESNOn", 1, "No", "grpYesNo" };
        Object[] control5 = new Object[] { 2, 1, 1, 50, 50, "checkDirectionN", 1, "North", "grpDirection" };
        Object[] control6 = new Object[] { 2, 1, 1, 50, 50, "checkDirectionS", 1, "South", "grpDirection" };
        Object[] control7 = new Object[] { 2, 1, 1, 50, 50, "checkDirectionW", 1, "West", "grpDirection" };
        Object[] control8 = new Object[] { 2, 1, 1, 50, 50, "checkDirectionE", 1, "East", "grpDirection" };

        controlsList.Add(control1);
        controlsList.Add(control2);
        controlsList.Add(control3);
        controlsList.Add(control4);
        controlsList.Add(control5);
        controlsList.Add(control6);
        controlsList.Add(control7);
        controlsList.Add(control8);

        //Some LINQ code to get back a count of all the textfields(1) and all the checkboxes(2)

4voto

mathieu Punkte 30503
// group by first item of each object[]
var groups = controlsList.GroupBy(x => x[0]);

foreach( var g in groups ){
    var count = g.Count();
}

o

var groups = controlsList.GroupBy(x => x[0]).ToList();

var txtCount = groups[0].Count();
var chkCount = groups[1].Count();

4voto

Kirk Woll Punkte 72923
int textBoxCount = controlsList.Count(o => (int)o[0] == 1);
int checkBoxCount = controlsList.Count(o => (int)o[0] == 2);

1voto

tzaman Punkte 44506

Sie können eine GroupBy gefolgt von einer Count :

var query = controlsList.GroupBy(arr => (int)arr[0])
                        .Select(g => new { Id = g.Key, Count = g.Count() });

Jetzt query enthält eine Liste von Objekten mit jedem Bezeichner und einer entsprechenden Anzahl.

0voto

Edward Leno Punkte 6139

Ich bin ein Noob in Linq, aber vielleicht hilft Ihnen das ...

        var c1 = from t in controlsList
                 where t[0].ToString() == "1"
                 select t;

        Console.WriteLine("text count = " + c1.Count());

        var c2 = from t in controlsList
                 where t[0].ToString() == "2"
                 select t;

        Console.WriteLine("check count = " + c2.Count());

0voto

Matt B Punkte 7945

Wie wäre es damit?

Dictionary<object, int> controls = controlsList.GroupBy(x => x[0]).ToDictionary(x => x.Key, x => x.Count());
int textBoxCount = controls[1];
int checkBoxCount = controls[2];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X