gpt4 book ai didi

linq - 相当于 SQL IN 子句

转载 作者:行者123 更新时间:2023-12-04 12:24:06 26 4
gpt4 key购买 nike

我有一个名为 new_trexmail 的实体,它有一个名为 new_contextline 的字符串属性。

我正在尝试获取定义列表中 new_contextline 的实体列表。

以下代码因错误而失败:NotSupportedException: Invalid 'where' condition. An entity member is invoking an invalid property or method.

string[] test = new[]{"aaa", "hhh"};

var query = from n in New_trexmailSet
where test.Contains(n.New_contextline)
select n;

我理解为什么会抛出这个错误,但我想知道是否可以使用 XRM 来实现 IN 子句的等效项。

如果可能的话,我该如何让 XRM 执行 SELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh') ?

谢谢,

大卫

最佳答案

查看(比预期更长的)list of LINQ limitations ,特别是对 where 的限制条款:

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. Supports the String functions Contains, StartsWith, EndsWith, and Equals.



所以自从 test不是 CRM 属性,您不能调用 Contains在上面。但是,解决此问题的一种方法是使用由 ScottGu 开发的“ Dynamic Linq”,如下所示:
//must include the below using statements
//using System.Linq;
//using System.Linq.Dynamic;

var trexmailSet = New_trexmailSet;

string[] test = new[] { "aaa", "hhh" };

string whereClause = "";

foreach (string name in test)
{
whereClause += string.Format("new_contextline = \"{0}\" OR ", name);
}

trexmailSet = trexmailSet.Where(whereClause.Substring(0, whereClause.Length - 4));

var query = from n in trexmailSet
select n;

关于linq - 相当于 SQL IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com