平台: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
我想要过滤的只是包含英国的数据。
答案 0 :(得分:1)
如果你总是知道你的表的第二个参数是国家,你可以这样做:
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());
}
}