平台: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
我要过滤的只是包含英国的数据。
如果您始终知道表的第二个参数是国家/地区,则可以这样操作:
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] 删除。
我来说两句