Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core IQueryable,其中包含一个列表抛出;找不到CLR类型';列表<;字符串>'&引用;_Asp.net Core_Db2_Entity Framework Core - Fatal编程技术网

Asp.net core IQueryable,其中包含一个列表抛出;找不到CLR类型';列表<;字符串>'&引用;

Asp.net core IQueryable,其中包含一个列表抛出;找不到CLR类型';列表<;字符串>'&引用;,asp.net-core,db2,entity-framework-core,Asp.net Core,Db2,Entity Framework Core,在使用IBM.EntityFrameworkCore和IBM.Data.DB2.Core时,每当我有一个Where语句,其中包含一个正在执行某种验证的列表时,就会抛出一个错误 当IQueryable正在具体化时,即使用ToList()转换为列表时,会引发错误 找不到CLR类型到关系类型的映射 “名单” 专用IQueryable筛选器Advisor的活动(IQueryable活动列表,列表advisorCodes) { ListadvisorInformation=GetAdvisorCastom

在使用IBM.EntityFrameworkCore和IBM.Data.DB2.Core时,每当我有一个
Where
语句,其中包含一个正在执行某种验证的列表时,就会抛出一个错误

当IQueryable正在具体化时,即使用
ToList()
转换为列表时,会引发错误

找不到CLR类型到关系类型的映射 “名单”

专用IQueryable筛选器Advisor的活动(IQueryable活动列表,列表advisorCodes)
{
ListadvisorInformation=GetAdvisorCastomers(advisorCodes)。结果;
var advisorCustomers=advisorInformation.SelectMany(a=>a.Customers)
.Distinct()
.ToList();
//这是有问题的地方
activitiesList=activitiesList.Where(a=>advisorcstomers.Any(ac=>ac==a.CustomerId));
返回活动列表;
}

公共类广告
{
公共字符串AdvisorCode{get;set;}
公共列表客户{get;set;}
}
错误可能是什么,因为AFAIK,使用列表的条件不仅应该由LINQtoEntities支持,而且应该由LINQtoSQL支持

DB2实体框架库是否可能不支持,即不将这些条件转换为SQL?

有人能证实吗


我的主要要求是保持IQueryable,以便对数据库执行查询。是否可以使用其他内容重写查询?

DB2 EF核心库(目前)确实不支持使用
.Any()
.Contains()
。但是,可以通过编写一个自定义表达式来“重写”此行为,该表达式模仿SQL
WHERE
函数,并在查询中使用多个条件


基本上,您传递要迭代的列表,并使用
Expression.OrElse()
将列表中的每一项附加到表达式体。最后,使用
expression.Call()

返回表达式
GetAdvisorCustomers
做什么?另外,您正在这里调用
.Result
,这非常危险。您应该等待那个调用。@DavidG关于
GetAdvisorCustomers
,它只是传递一个列表。关于wait,这是我继承的代码,所以它在待办事项列表上:)我不明白你的话说(意译)“当我调用ToList()时它正在发生”,你的代码commnt说“在我调用ToList()后它正在发生”@CaiusJard每当我执行.ToList()时都会抛出错误。但是,如果我使用更简单的方法(例如基本字符串比较)重写
Where
,则不会抛出错误。您不能将
列表
作为实体中的类型,我假设这就是抛出错误的原因。
private IQueryable<CollectionActivityInOverview> FilterActivitiesForAdvisor(IQueryable<CollectionActivityInOverview> activitiesList, List<string> advisorCodes)
{
    List<AdvisorCustomerInfo>advisorInformation = GetAdvisorCustomers(advisorCodes).Result;
    var advisorCustomers = advisorInformation.SelectMany(a => a.Customers)
        .Distinct()
        .ToList();

    // This is the problematic spot
    activitiesList = activitiesList.Where(a => advisorCustomers.Any(ac => ac == a.CustomerId));

    return activitiesList;
}
public class AdvisorCustomerInfo
{
    public string AdvisorCode { get; set; }

    public List<string> Customers { get; set; }
}