2

我有一个 LINQ 查询,它获取它需要的所有数据并将其合并到一个数据传输对象中,一切正常,除了当我将 DTO 的一个成员(它是一个字符)设置为一个字符值时它抛出查询异常......

mscorlib.dll 中出现“System.ServiceModel.FaultException”类型的未处理异常

无法创建“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”是行不通的,在语法上没问题,只是在执行查询时不行!可能是什么问题?

4

3 回答 3

7

这是 EF 的一个限制,因为char它不是原始类型,有关原因的更多详细信息,请参阅此答案。限制本身也记录在案

我建议你只使用string.

于 2013-09-26T10:54:49.773 回答
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;
于 2014-09-26T12:45:54.100 回答
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 替换它们可以解决问题。

于 2020-04-24T15:24:20.280 回答