Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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
结果为分隔字符串的LINQ匿名对象(LINQ to Entities不识别方法'System.string ToString()'方法)_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

结果为分隔字符串的LINQ匿名对象(LINQ to Entities不识别方法'System.string ToString()'方法)

结果为分隔字符串的LINQ匿名对象(LINQ to Entities不识别方法'System.string ToString()'方法),linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我正在努力找一个合适的工作;一个人所拥有的所有亲戚的数字串。 涉及四个表格: 用户标签 人 人际关系 关系选项卡 质疑 我希望描述字段是一个;用户拥有的所有亲属的分隔列表 在我的亲戚对象上使用ToString只会在运行时失败。LINQ to实体无法识别方法“System.String ToString”方法 示例:Description=Father,Brother,cosing这应该可以:为数组字符串编写一个扩展方法,如下所示: public static ToCsv(this string[

我正在努力找一个合适的工作;一个人所拥有的所有亲戚的数字串。 涉及四个表格:

用户标签 人 人际关系 关系选项卡

质疑

我希望描述字段是一个;用户拥有的所有亲属的分隔列表

在我的亲戚对象上使用ToString只会在运行时失败。LINQ to实体无法识别方法“System.String ToString”方法


示例:Description=Father,Brother,cosing

这应该可以:为数组字符串编写一个扩展方法,如下所示:

public static ToCsv(this string[] strings)
{
    return String.Join("," strings);
}

然后,在你的.ToArray调用的末尾添加.ToCsv,它应该会成功

您需要清楚查询的哪些部分被转换为SQL以在服务器上运行,哪些部分在本地应用程序中运行。关键是构造一个简单的查询来检索所有数据,然后使用.AsEnumerable确保其余转换不会转换为SQL,最后将数据转换为对您有用的形式。差不多

var query =
    from u in USERTAB
    select new
    {
        Person =
            from p in PERSON
            where p.USERID == u.USERID
            select new
            {
                PNo = p.NO,
                Name = p.NAME
                Relatives =
                    from r in PERSON_RELATION
                    where r.PSEQ == p.PSEQ
                    select new
                    {
                        Description =
                            from rel in RELATION_TYPE
                            where rel.TYPE_SEQ == r.TYPE_SEQ
                            select pos.DESCRIPTION
                    }
            }
        }
    };

var enumerable =
    from u in query.AsEnumerable()
    select new
    {
        Person =
            from p in u.Person
            select new
            {
                PNo = p.PNo,
                Name = p.Name
                Relatives =
                    string.Join(", ",
                        from r in p.Relatives
                        from d in r.Description
                        select d.Description)
            }
        }
    };

应该这样做。

这只会导致不同的LINQ to实体无法识别该方法。。。例外ToCsv不能在服务器上运行,所以不应该是查询表达式的一部分,它应该在客户端上运行。对,我忘了这是L2E。它将无法编译查询。我想唯一的方法是使用多个查询将数据加载到内存中,然后使用内存中的LINQ从中选择一个结果,该LINQ可以使用像这样的扩展方法。它返回:对于具体化的查询结果,不支持此方法。@Kman您是在结果上使用简单的foreach循环,还是使用更复杂的方法?如果遇到更复杂的问题,请不要忘记首先使用enumerable.ToList将结果存储在内存中的某个位置。如果你得到了这个异常,我会仔细看一看,并尝试给出一个完全有效的最小示例。如果我使用面向MSSQL数据库运行的LinqToSQL,我就可以实现这一点。然而,对另一个数据库Sybase使用LinqToEntity,我得到了一个物化查询结果不支持的结果。问题似乎出在EF数据提供程序中。我可能会尝试其他方法吗?但您的解决方案是解决我的初始问题,所以我将其标记为答案。Thanx@Kman我会看一看,看看我是否能用MSSQL和EF一起工作。我这里没有Sybase,但我确实使用EF。不过这需要一些时间。
var query =
    from u in USERTAB
    select new
    {
        Person =
            from p in PERSON
            where p.USERID == u.USERID
            select new
            {
                PNo = p.NO,
                Name = p.NAME
                Relatives =
                    from r in PERSON_RELATION
                    where r.PSEQ == p.PSEQ
                    select new
                    {
                        Description =
                            from rel in RELATION_TYPE
                            where rel.TYPE_SEQ == r.TYPE_SEQ
                            select pos.DESCRIPTION
                    }
            }
        }
    };

var enumerable =
    from u in query.AsEnumerable()
    select new
    {
        Person =
            from p in u.Person
            select new
            {
                PNo = p.PNo,
                Name = p.Name
                Relatives =
                    string.Join(", ",
                        from r in p.Relatives
                        from d in r.Description
                        select d.Description)
            }
        }
    };