C# 如何在动态集合中使用LINQ
是否有方法将C# 如何在动态集合中使用LINQ,c#,linq,C#,Linq,是否有方法将动态对象转换为IEnumerable类型以使用属性筛选集合 dynamic data = JsonConvert.DeserializeObject(response.Content); 我需要访问这样的东西 var a = data.Where(p => p.verified == true) 有什么想法吗?试着转换成IEnumerable ((IEnumerable)数据),其中(d=>d.Id==1); 这种方法比其他方法快4倍 祝你好运只要数据是某种类型的IEnu
动态
对象转换为IEnumerable
类型以使用属性筛选集合
dynamic data = JsonConvert.DeserializeObject(response.Content);
我需要访问这样的东西
var a = data.Where(p => p.verified == true)
有什么想法吗?试着转换成
IEnumerable
((IEnumerable)数据),其中(d=>d.Id==1);
这种方法比其他方法快4倍
祝你好运只要
数据
是某种类型的IEnumerable
,你就可以使用:
var a = ((IEnumerable) data).Cast<dynamic>()
.Where(p => p.verified);
var a=((IEnumerable)数据).Cast()
其中(p=>p.verified);
Cast()
以一个IEnumerable
结束,这样lambda表达式的参数类型也是dynamic
如果可以,理想的解决方案是在反序列化时指定类型,以避免以后必须强制转换。这比上面建议的方法要干净得多
所以如果你有-
dynamic data = JsonConvert.DeserializeObject(response.Content);
然后简单地将此更改为-
var data = JsonConvert.DeserializeObject<IEnumerable<dynamic>>(response.Content);
var data=JsonConvert.DeserializeObject(response.Content);
这可能会有所帮助,用response.Content替换jsonString,如果需要,根据您的响应内容使用嵌套循环
在下面的代码中,JValue.Parse将返回JToken,它是IEnumerable
string jsonString = "[{\"Question\":{\"QuestionId\":49,\"QuestionText\":\"Whats your name?\",\"Answer\":\"xyz\"}},{\"Question\":{\"QuestionId\":51,\"QuestionText\":\"Are you smart?\",\"Answer\":\"Yes\"}}]";
dynamic myObject = JValue.Parse(jsonString);
foreach (dynamic questions in myObject)
{
Console.WriteLine(questions.Question.QuestionId + "." + questions.Question.QuestionText.ToString());
Console.WriteLine("Ans. " +questions.Question.Answer);
Console.WriteLine();
}
Console.Read();
您可以使用@Jon提供的解决方案和您的解决方案有什么区别吗Skeet@HosseinNarimaniRadNET中可枚举类的Cast方法将传递的IEnumerable(本例中为数据)的每个成员强制转换为某个对象(本例中为动态对象),因此,如果您的数据有1000个项,则该代码将执行1000次强制转换,但是我的代码只有一个类型。缺点是这不适用于
IEnumerable
,其中t
是值类型,例如List
。“有时候这可能是相关的,有时候则不是。”JonSkeet我很想知道你对Yasser的答案有什么看法。有什么显著的区别吗?@HosseinNarimaniRad:是的,我的会工作,即使它是一个值类型的序列;亚西尔的不会。我添加了一条注释。如问题所述,“将动态对象转换为IEnumerable”在哪里?此解决方案是一种替代方法,无需将动态对象转换为IEnumerable。Parse将返回JToken,它是IEnumerable
string jsonString = "[{\"Question\":{\"QuestionId\":49,\"QuestionText\":\"Whats your name?\",\"Answer\":\"xyz\"}},{\"Question\":{\"QuestionId\":51,\"QuestionText\":\"Are you smart?\",\"Answer\":\"Yes\"}}]";
dynamic myObject = JValue.Parse(jsonString);
foreach (dynamic questions in myObject)
{
Console.WriteLine(questions.Question.QuestionId + "." + questions.Question.QuestionText.ToString());
Console.WriteLine("Ans. " +questions.Question.Answer);
Console.WriteLine();
}
Console.Read();