在 linq to sql 查询中使用 contains() 获取数据

get the data using contains() in linq to sql query

我正在尝试使用 c# 从 crm 实体获取记录列表。 正在尝试获取具有另一个列表中存在的 ID 的记录。

这里是查询:

 private static List<plus_visit> GetVisits(IOrganizationService service, List<Guid> customVendorIDs = null)
  {  
        var visits = new List<plus_visit>();
        using (var crm = new CrmServiceContext(service))
        {
            try
            {
               visits = crm.plus_visitSet.Where(a => customVendorIDs.Contains(a.ow_Vendor.Id)).ToList();
            }
            catch (Exception ex)
            {
                Utility.LogError(ex);
            }
            return visits;
        }

我收到错误消息“无效的 where 条件。实体成员正在调用无效的 属性 或方法。”

当我将其更改为如下所示的 .tolist() 时,它会起作用,但是首先转换为列表然后再对其进行查询需要花费大量时间。

visits = crm.plus_visitSet.tolist().Where(a => customVendorIDs.Contains(a.ow_Vendor.Id)).ToList();

plus_visit 是使用 XRMToolbox 早期绑定生成器生成的。它看起来像:

public System.Linq.IQueryable<CrmEarlyBound.plus_visit> plus_visitSet
    {
        [System.Diagnostics.DebuggerNonUserCode()]
        get
        {
            return this.CreateQuery<CrmEarlyBound.plus_visit>();
        }
    }

知道我做错了什么吗?

Here 您可以找到 LINQ 限制列表。您的查询符合 'The left side of the clause must be an attribute' 规则...

如果 customVendorIDs 也通过 LINQ 查询检索,您可以通过使用供应商过滤器连接表来解决此限制,以仅获取所需的 plus_visitSet 记录。

请注意,使用 crm.plus_visitSet. ** tolist() ** ... 查询,您将从数据库中检索所有 plus_visit 记录,然后将其过滤掉。这可能会对性能产生重大影响....