我在C#中有一个 EntityCollection ec ,其中已填充了所有帐户。 现在我需要来自 ec 的另一个List或EntityCollection,其中所有帐户的状态都处于活动状态。
我正在使用Linq。
但两种形式的LINQ都返回一个空结果,而 ec 有354条记录
var activeCRMEC = (from cl in ec.Entities
where cl.Attributes["statecode"].ToString()=="0"
select cl);
OR
var activeCRMEC = ec.Entities.Where(x => x.Attributes["statecode"].ToString() == "0");
每次结果集为空时我都无法迭代它。我已经检查了300个左右的帐户。 当我使用其他属性如name等时会发生同样的事情。
请善意指出我的错误。
答案 0 :(得分:0)
我会给你一些提示,然后告诉你我猜你的问题是什么。
首先,使用早期绑定实体。如果您之前从未生成过它们,请使用earlybound generator,这样可以让您自己避免烦恼。
其次,如果您不能使用早期绑定实体,请在Entity类上使用GetAttribute()方法。它会为您转换类型,并处理空引用问题。
您的LINQ表达式看起来是正确的,因此ec.Entities中没有任何符合" statecode"标准的实体。等于0,或者您的IEnumerables可能会发生一些不同的执行。在LINQ语句之后立即尝试在activeCRMEC上调用ToList()
,以确保这不是您的问题。
答案 1 :(得分:0)
statecode是一个OptionSetValue,您应该以这种方式投射它
((OptionSetValue)cl.Attributes["statecode"]).Value == 0
或
cl.GetAttributeValue<OptionSetValue>("statecode").Value == 0
两种方式都有效,你应该要求它是一个int。
希望这可以帮到你。
答案 2 :(得分:0)
您可以生成早期绑定类来编写 Linq查询。
或其他
您可以使用后期绑定使用 OrganizationServiceContext类编写Linq查询。
供您参考:
OrganizationServiceContext OrgServiceCOntext = new OrganizationServiceContext(service);
var RetrieveAll = OrgServiceCOntext.CreateQuery("account").
ToList().Where(w => (w.GetAttributeValue<OptionSetValue>("statecode").Value ==0)).Select(s=>s);