我有一个LINQ查询,它抓取所需的所有数据并将其合并到一个数据传输对象中,一切正常但是当我将一个DTO的成员(这是一个char)设置为char值时抛出查询异常...
类型'System.ServiceModel.FaultException'的未处理异常 发生在mscorlib.dll
无法创建“System.Char”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
请参阅下面的简化查询:
var result = (from c in db.Foster_Carers
where c.foster_carer_id == id
join fc in db.Individual_Carers on c.first_carer_id equals fc.individual_carer_id
select new FosterCarerPersonalInfoDTO
{
carer_title = fc.title,
carer_forenames = fc.forename,
carer_surname = fc.surname,
carer_gender = 'm'
}).SingleOrDefault();
将性别设置为'm'只是不起作用,从语法上来说它没关系,只是在查询执行时没有!可能是什么问题?
答案 0 :(得分:7)
这是EF的限制,因为char
不是基本类型,有关原因的详细信息,请参阅此answer。限制本身也是documented。
我建议您使用string
。
答案 1 :(得分:0)
我遇到过相同的问题,必须存储一个中间值并在Linq查询之外进行转换:
var intermediateResult = (from c in db.Foster_Carers
where c.foster_carer_id == id
join fc in db.Individual_Carers on c.first_carer_id equals fc.individual_carer_id
select new
{
oldResult = new FosterCarerPersonalInfoDTO
{
carer_title = fc.title,
carer_forenames = fc.forename,
carer_surname = fc.surname,
}
, forConversion = new
{
carer_gender = "m"
}
}).SingleOrDefault();
intermediateResult.oldResult.carer_gender = intermediateResult.forConversion.carer_gender[0];
var result = intermediateResult.oldResult;
答案 2 :(得分:0)
如果这是使用c#来自VS和MVC的,则 摆脱撇号并改为使用全引号。
使用
carer_gender = "m"
代替
carer_gender = 'm'
我发现C#将单引号解释为char类型而不是字符串。
我有
var _list = (from a in table where string.Concat(a.AbsenceReasonCodeID, "|", a.Description).ToUpper().Contains(vlsTerm) select new { value = a.field1, label = String.Concat(a.field1, " : ", a.field2) }).ToList();
当我使用单引号时,出现了char错误。用double代替它们解决了这个问题。