2012-05-11 35 views
1
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 ..我在做什么错在这里,我失去的东西?到DbIsNullExpression的参数必须是指在原始或引用类型

如果假设我加入这一行,同时初始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

是CompanyModels结构? – erikkallen

+0

nope它的ViewModel类 – Meson

回答

0

我不知道这是什么例外试图告诉。我认为EF只能应用??运算符映射到映射对象,因为所有内容都必须转换为SQL。它没有CompanyModels的信息,所以它不知道该如何处理它。

如果是这样,我觉得你可以先设置一个属性解决这个问题,比方说,像这样:

... 
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无法处理枚举,所以你必须在那里处理整数。在这里查看堆栈溢出EF +枚举变通办法。

+0

谢谢你的回应,我会尝试这个,并让你知道很快...... – Meson

相关问题