Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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
C# 在此上下文中仅支持基元类型或枚举类型。Linq到SQL_C#_Entity Framework_Linq To Sql - Fatal编程技术网

C# 在此上下文中仅支持基元类型或枚举类型。Linq到SQL

C# 在此上下文中仅支持基元类型或枚举类型。Linq到SQL,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,我有一个表“Components”,其中包含列“AssemblyGuid”和“PartGuid”。 我有一个组件列表“组件指南” 如何进行Linq到Sql查询,通过复合键加载“componentsGuids”列表中的所有组件条目 var componentsDb = Context.Components//.ToList() an error occurs here .Where( x => componentsGuids.An

我有一个表“Components”,其中包含列“AssemblyGuid”和“PartGuid”。 我有一个组件列表“组件指南”

如何进行Linq到Sql查询,通过复合键加载“componentsGuids”列表中的所有组件条目

   var componentsDb = Context.Components//.ToList() an error occurs here
            .Where(
                x => componentsGuids.Any(
                    y => y.AssemblyGuid == x.AssemblyGuid
                    && y.PartGuid == x.PartGuid));

也许这能帮你找到解决办法。我不确定代码是否能像开箱即用的那样工作,但我希望它能让想法变得清晰。将两个guid合并到一个列表中,并使用
Contains
检查是否存在同样合并的guid对

类似的方法应该会奏效:

var componentsGuidsConcat = componentsGuid
    .Select(p => AssemblyGuid.ToString() + PartGuid.ToString())
    .ToList();

var componentsDb = Context.Components
    .Where(p => componentsGuidsConcat.Contains(
        p.AssemblyGuid.ToString() + p.PartGuid.ToString())
    );

很抱歉,但您的代码引发异常。{“内部错误:已达到expression services限制。请在查询中查找可能复杂的表达式,并尝试简化它们。”}它不应是现成的工作代码示例。它应该给你一个如何解决问题的想法。我不明白你为什么会有这样的例外。查询非常复杂……您的代码运行良好。但是,如果componentsGuidsConcat包含1000多个元素,则会出现一个异常thrownYes,这是正确的。这是因为sql server的限制。在这种情况下,您可能应该选择客户端的所有(未过滤)数据,然后进行过滤。但是,你可能选择了很多数据,实际上你没有,这可能会使你的查询速度变慢
var componentsGuidsConcat = componentsGuid
    .Select(p => AssemblyGuid.ToString() + PartGuid.ToString())
    .ToList();

var componentsDb = Context.Components
    .Where(p => componentsGuidsConcat.Contains(
        p.AssemblyGuid.ToString() + p.PartGuid.ToString())
    );