我的MVC应用程序中有以下视图模型类: -
public class CustomerDetails
{ public AccountDefinition AccountDefinition {get; set;}
public SDOrganization SDOrganization {get; set;}
public IEnumerable<SiteDefinition> SiteDefinition { get; set; }
public IEnumerable<AaaPostalAddress> AaaPostalAddress { get; set; }
public IEnumerable<AaaContactInfo> AaaContactInfo { get; set; }
public IEnumerable<SDUser> SDUser { get; set; } }
如果我尝试编写此查询,请使用: -
var customerDetails = entities.AccountDefinitions
.Where(a => a.ORG_ID == id)
.Select(cd => new CustomerDetails
{
AccountDefinition = cd,
SDOrganization = cd.SDOrganization,
AaaPostalAddress = cd.SDOrganization.AaaPostalAddresses,
AaaContactInfo = cd.SDOrganization.AaaContactInfoes,
SiteDefinition = cd.SiteDefinitions,
SDUser = cd.SiteDefinitions.Select(p => p.UserSiteMappings.Select(p2 => p2.SDUser))//this is raising the error
})
.SingleOrDefault();
return customerDetails;
}
我会收到以下错误: -
无法将
System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<TMS.Models.SDUser>>
类型隐式转换为System.Collections.Generic.IEnumerable<TMS.Models.SDUser>
。存在显式转换(您是否错过了演员?)
我的代码出了什么问题?
答案 0 :(得分:2)
由于在Java中实现泛型的方式,您可以使用类似List<E>
的泛型类型而不提供泛型参数(例如,仅List
)。 C#不会以这种方式工作,因此您在此问题的标题中提供的类型(System.Collections.Generic.IEnumerable
)实际上并不存在。这里的实际问题是:
为什么将
System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<TMS.Models.SDUser>>
转换为System.Collections.Generic.IEnumerable<TMS.Models.SDUser>
会被视为错误。
答案类似于您无法将类型int[,]
的对象分配给int[]
类型的变量的原因。也许您打算在报告错误的行上使用SelectMany
而不是Select
。这会“压扁”单个结果,以生成包含每个子结果中所有元素的单个枚举。
SDUser = cd.SiteDefinitions.SelectMany(
p => p.UserSiteMappings.Select(p2 => p2.SDUser))