对Object []数组列表的LINQ查询

时间:2010-08-11 20:24:36

标签: c# linq

我有一个Object数组列表(List)我将传递给DLL函数来应用PDF控件。每个对象的第一个索引应该用于标识控件的内容。我想知道是否有某种方法来查询我的对象列表以获取每个标识对象的计数并将其转换为int?这是我想要做的一个例子......

        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)

5 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

您可以GroupBy后跟Count

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

现在query将包含具有每个标识符和相应计数的对象列表。

答案 3 :(得分:0)

我是linq的菜鸟,但也许这会对你有帮助......

        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());

答案 4 :(得分:0)

这个怎么样?

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