DbIsNullExpression的参数必须引用基元或引用类型

时间:2012-05-11 08:34:00

标签: c# linq entity-framework

var offices=  from x in _officeRepository.GetAll()
                      select new OfficeModels()
                                 {
                                     Id = x.id,
                                     AddressOne = x.address_1,
                                     AddressTwo = x.address_2,
                                     Company = x.a1.Select(y => new CompanyModels { Id=y.id, Name = y.name}).FirstOrDefault()??
                                                x.a2.Select(y => new CompanyModels { Id = y.id, Name = y.name }).FirstOrDefault() ??
                                                x.a3.Select(y => new CompanyModels { Id = y.id, Name = y.name }).FirstOrDefault() ??
                                                x.a4.Select(y => new CompanyModels { Id = y.id, Name = y.name }).FirstOrDefault(),
                                     City = x.city,
                                     Active = x.active,
                                     Country = x.country,
                                     Deleted = x.deleted,
                                     OfficeFax = x.fax,
                                     OfficeName = x.office_name,
                                     OfficePhone = x.office_phone
                                 };

我收到此错误The argument to DbIsNullExpression must refer to a primitive or reference type,错误是因为CompanyModels ..我在这里做错了什么,我错过了什么?

如果假设我在初始化CompanyModels时包含这一行

new CompanyModels { CompanyId = y.id, Name = y.name,CompType = Enumerations.Companies.MediaSellers }

CompType = Enumerations.Companies.MediaSellers这会产生一些不同的错误The specified value is not an instance of type 'Edm.Int32'Parameter name: value

1 个答案:

答案 0 :(得分:0)

我不确定这个异常试图告诉我什么。我认为EF只能应用??操作符到映射对象,因为所有内容都必须转换为SQL。它没有CompanyModels的信息,所以它不知道如何处理它。

如果是这样,我认为你可以通过首先设置一个属性来解决它,比如A,就像这样:

...
AddressTwo = x.address_2,
A = x.a1.FirstOrDefault() ?? x.a2.FirstOrDefault() ?? 
    x.a3.FirstOrDefault() ?? x.a4.FirstOrDefault(),
...

并为OfficeModels类提供如下公司属性:

public CompanyModels Company
{
    get
    {
        return A != null ? new CompanyModels {Id = A.id, Name = A.name} : null;
    }
}

(我有类似的查询工作)。

至于第二个问题:EF无法处理枚举,所以你必须在那里使用整数。在这里查看Stack Overflow for EF + enum work-arounds。