我如何使用""在Microsoft CRM中检索记录/实体时LINQ中的where子句?

时间:2014-07-11 01:54:19

标签: c# linq dynamics-crm-2011 microsoft-dynamics

只是遇到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部分遇到错误。

1 个答案:

答案 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