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
答案 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。