(在Linq中列出<dictionary <object,object =“”>&gt;以提取数据

时间:2018-03-12 14:43:22

标签: c# linq

我有数据定义

我将JSON反序列化为此对象

@return是JSON

type=int

这是JsonConvert.DeserializeObject<List<Dictionary<Object, Object>>>(utils.RemoveJsonOuterClass("GetTable", JsonConvert.DeserializeObject(@return).ToString())); olist = [ [{ "item": 1 "Name "One" }], [{ "item": 2 "Name "Two" }], [{ "item": 1 "Name "One Two" }] ];

我需要找到List<Dictionary<Object, Object>>的所有项目。

我可以使用Linq吗?或者在使用大量数据时还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

首先:您的json修复不正确。

  • 名称和值之间应存在colon
  • 项目值
  • 后应出现comma

然后按以下方式更改您的代码

//Create a class matching response object
public class ResponseItem
{
    [JsonProperty("item")]
    public int Item { get; set; }
    public string Name { get; set; }
}

var responseJson = utils.RemoveJsonOuterClass("GetTable", 
JsonConvert.DeserializeObject(@return).ToString();

var responseData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<List<ResponseItem, ResponseItem>>>(responseJson);

然后将foreachWhere一起使用并应用条件

foreach (var responseObject in responseData.Where(x=>x.First().Item.Equals(1)))
{

}

Where是延迟执行,在每个循环中,它返回一个对象。  这是我本地执行的截图。

enter image description here

答案 1 :(得分:0)

不知道你对对象类型是否正确。但任务很容易解决:

static void Main(string[] args)
{
    // Build the object
    List<Dictionary<int, TestObject>> list = new List<Dictionary<int, TestObject>>();

    // fill it with dictionaries
    list.Add(new List<TestObject>()
    {
        new TestObject(){ Id = 1, Name = "One" },
        new TestObject() { Id = 2, Name = "Two" },
        new TestObject() { Id = 3, Name = "Three" }
    }.ToDictionary(d => d.Id));

    list.Add(new List<TestObject>()
    {
        new TestObject() { Id = 2, Name = "Two" },
        new TestObject() { Id = 3, Name = "Three" }
    }.ToDictionary(d => d.Id));

    list.Add(new List<TestObject>()
    {
        new TestObject(){ Id = 1, Name = "One" },
        new TestObject() { Id = 2, Name = "Two" }
    }.ToDictionary(d => d.Id));

    // Let's build a single list to work with
    IEnumerable<TestObject> completeList = list.SelectMany(s => s.Values);

    // aaaand filter it
    IEnumerable<TestObject> filteredList = completeList.Where(l => l.Id == 1);
}

public class TestObject
{
    public int Id { get; set; }
    public string Name { get; set; }
}

大多数部分是初始化; - )