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 が原因でエラーが発生しました。ここで間違っていることは何ですか?

そして、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

4

1 に答える 1

0

この例外が何を伝えようとしているのかわかりません。EFは??のみを適用できると思います これは、すべてを SQL に変換する必要があるためです。CompanyModels の情報がないため、どうすればよいかわかりません。

もしそうなら、最初にプロパティを設定することで解決できると思います。たとえば、次のように A とします。

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

OfficeModelsクラスに Company プロパティを次のように指定します。

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

(同様のクエリが機能しました)。

2 番目の質問については、EF は列挙型を処理できないため、そこで整数を操作する必要があります。EF + enum の回避策については、Stack Overflow を参照してください。

于 2012-05-12T18:43:19.067 に答える