只是遇到LINQ和Microsoft CRM的问题,我希望你能提供帮助。
在SQL术语中我的想法是:
select * from table where id in ("1", "2", "3")
我有这段代码,它可以在从 SQL Server 中检索记录时正常工作。
var _records = from _adUserDatas in _adUserDataDBDataContex.ADUserDatas
where
_list.Contains(_adUserDatas.id)
orderby _adUserDatas.fan
select _adUserDatas;
当我将其更改为使用Microsoft CRM中的联系人实体时,它会抛出一个异常并且它说我的where子句无效。
任何想法如何让它发挥作用?
感谢
PS。我找到了这个tackoverflow讨论,但我在myset.where部分遇到错误。
答案 0 :(得分:1)
CRM LINQ Context不支持此功能。请在此处查看LINQ limitations。
LINQ运营商:其中
<强>限制:强>
The left side of the clause must be an attribute name and the right side of the clause must be a value. You cannot set the left side to a constant. Both the sides of the clause cannot be constants.
有一种称为Dynamic Linq的解决方法。看看它是否可以帮到你。
使用Dynamic Linq,就像跟随shoule一样适合你。
var adUserDatas = _adUserDataDBDataContex.ADUserDatas
string[] _list = new[] { "1", "2", "3" };
string whereClause = String.Empty;
foreach (var id in _list)
{
whereClause += string.Format("_adUserDatas.id = \"{0}\" OR ", id);
}
adUserDatas = adUserDatas.Where(whereClause.Substring(0, whereClause.Length - 4));
var query = from n in adUserDatas
select n;
参考:Link