使用Linq过滤Json对象

苛刻的库马尔·辛吉(Harsh Kumar Singhi)

平台:C#IDE:Visual Studio 2010

我是Linq的新手,并尝试使用它过滤Json对象。有什么建议?这是代码:

string jsonGetData = objstats.getData_Emp(lblEmp.Text,lblYear.Text);
//JavaScriptSerializer strJsonSer = new JavaScriptSerializer();

var lstEmpAnalysis = JsonConvert.DeserializeObject<empAnalysis>(jsonGetData);

现在,从上面的lstEmpAnalysis中,我需要过滤empAnalysis类的第一个表上的数据,该表的一个索引包含国家/地区,并仅显示过滤器中使用的那些国家/地区数据,如下所示:

public class empAnalysis
{
    public List<List<object>> Table { get; set; }
    public List<List<double>> Table1 { get; set; }
    public List<List<object>> Table2 { get; set; }
}

那么,有什么建议吗?

输入以这种方式来:

Table 
[0][0] : Abc
[0][1] : India
[0][2] : Engineer
[1][0] : Xyz
[1][1] : UK
[1][2] : Support Engineer

我要过滤的只是包含英国的数据。

披头士乐队1692

如果您始终知道表的第二个参数是国家/地区,则可以这样操作:

var items= from item in empAnalysis.Table where item[1]=="UK" select item; 

正如我在评论中提到的那样,尽管我总是更喜欢在这里使用强类型对象:例如:

public class Employee{
       public string Name{get;set;}
       public string Country{get;set;}
       public string JobTitle{get;set;}
}

public class empAnalysis
{
    public List<Employee> Table { get; set; }
    public List<List<double>> Table1 { get; set; }
    public List<List<object>> Table2 { get; set; }
}

然后我们可以写:

var items= from employee in empAnalysis.Table where employee.Country=="UK" select item;

顺便说一下,顺便说一句,我们可以做这样的事情:

var people=from item in empAnalysis.Table select new {
    Title=item[0],
    Country=item[1],
    JobTitle=item[2],
};

var peopleFromUK=from person in people where person.Country=="UK";

尽管应该建议您获取具有Title,Country和JobTitle属性的匿名类型对象的列表。

更新:

这是我使用NUnit编写的测试,它通过了。

[TestFixture]
public class LinqToObjectTests
{
    [Test]
    public void ThereShouldBeOnlyOneListForUK()
    {
        var list = new List<List<object>>
        {
            new List<object>(), 
            new List<object>()
        };

        list[0].Add("Name");
        list[0].Add("UK");
        list[0].Add("Title");


        list[1].Add("Name");
        list[1].Add("NOT UK");
        list[1].Add("Title");
        var query = from item in list where item[1] == "UK" select item;
        Assert.AreEqual(1, query.Count());
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章