结果为分隔字符串的LINQ匿名对象(LINQ to Entities不识别方法'System.string ToString()'方法)
我正在努力找一个合适的工作;一个人所拥有的所有亲戚的数字串。 涉及四个表格: 用户标签 人 人际关系 关系选项卡 质疑 我希望描述字段是一个;用户拥有的所有亲属的分隔列表 在我的亲戚对象上使用ToString只会在运行时失败。LINQ to实体无法识别方法“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[
示例: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)
}
}
};