ForEach over Object error(ForEach Over Object错误)
问题描述
我在方法中有一个查询,因此我可以从多个位置调用i,如下所示:
private object GetData(ProfilePropertyDefinition lProfileProperty)
{
return from r in gServiceContext.CreateQuery("opportunity")
join c in gServiceContext.CreateQuery("contact") on ((EntityReference)r["new_contact"]).Id equals c["contactid"] into opp
from o in opp.DefaultIfEmpty()
where ((EntityReference)r["new_channelpartner"]).Id.Equals(lProfileProperty.PropertyValue) && ((OptionSetValue)r["new_leadstatus"]).Equals("100000002")
select new
{
OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
};
}
然后在另一个方法中,我调用类似于so的查询方法,并尝试遍历它:
var exportData = GetData(lProfileProperty);
foreach (var lItem in exportData)
{
}
然后,在相同的方法中,当我尝试循环遍历结果时,在Foreach上不断收到以下错误:
Foreach语句不能对‘Object’类型的变量进行操作,因为‘Object’不包含‘GetEnumerator’的公共定义
任何会导致什么以及如何修复它的想法,我都被难住了。
编辑:
采纳了乔恩的建议,在很大程度上,它似乎奏效了。但当我调用类似GetData<lProfileProperty.PropertyValue>;
的方法时,它会说无法找到lProfileProperty。但它就在那里。有什么想法吗?
编辑2:我已经准备好了Jon示例中的所有内容。但我收到了一个错误:在foreach (GridDataItem lItem in exportData)
上,它显示错误67无法将类型‘DotNetNuke.modules.CPCLeadShare.View.Foo’转换为‘Telerik.Web.UI.GridDataItem’。有什么办法可以解决这个问题吗?我需要能够使用DGridDataItem才能访问"单元格"。
推荐答案
编译器告诉您问题是什么:您不能迭代静态类型为object
的对象。修复GetData
方法的返回类型以返回实现IEnumerable
的内容。
由于您返回的是匿名类型的序列,因此只需将代码更改为
private IEnumerable GetData(ProfilePropertyDefinition lProfileProperty)
但是,您将无法访问对象中的属性,除非通过反射。要解决这个问题,您需要创建一个新类并返回它的实例。例如:
class Foo {
public string OpportunityId { get; set; }
public string CustomerId { get; set; }
public string Priority { get; set; }
public string ContactName { get; set; }
}
然后
private IEnumerable<Foo> GetData(ProfilePropertyDefinition lProfileProperty) {
// ...
select new Foo
{
OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
};
// ...
}
这篇关于ForEach Over Object错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ForEach Over Object错误
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01