我正在尝试获取一个人拥有的所有亲属的 ; 分隔字符串。涉及四个表:
"用户"选项卡人PERSON_RELATIONRELATION_TAB
查询
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 rel.DESCRIPTION).ToArray() //(or also tried .ToString())
})
}
}
我希望"描述"字段是用户(人)拥有的所有亲属的";"分隔列表。
在我的亲戚对象上使用 ToString,它只会在运行时失败。LINQ to Entities 无法识别方法 'System.String ToString()' 方法
示例:说明 ="父亲、兄弟、堂兄"
您需要清楚查询的哪些部分被转换为 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)
}
}
};
应该做这个伎俩。
这应该有效:为数组字符串编写一个扩展方法,如下所示:
public static ToCsv(this string[] strings)
{
return String.Join("," strings);
}
然后只需在上面的.ToArray()
通话结束时.ToCsv()
,它应该可以解决问题!