"объект" не содержит определения для динамического

Я использую ниже описывающий метод. Это возвращает динамический результат.

public static dynamic GetCouponDetailsbyCouponID(Guid couponID)
 {
 using (var ********** = new Entities())
 {
 dynamic nonWinnerGift = (from nw in **********.CorporateNonWinnerGift
 join um in **********.Users on nw.UserID equals um.Id
 where nw.IsDeleted != true && nw.CouponID == couponID
 select new
 {
 FullName = (um.FirstName + " " + um.LastName),
 Title = nw.Title,
 Description = nw.Description,
 LogoName = nw.LogoName,
 CouponID = nw.CouponID,
 IsDiscount = nw.IsDiscount,
 Discount = nw.Discount,
 Desclaiemer = nw.Desclaiemer
 }).SingleOrDefault(); 
 return nonWinnerGift;
 }
 }
 dynamic expandDoObject = new ExpandoObject();

Когда я пытаюсь получить доступ к "couponData.LogoName", чем исключение динамического исключения во время выполнения. Ниже вы найдете мое исключение "Первое закрытие исключения типа" Microsoft.CSharp.RuntimeBinder.RuntimeBinderException "произошло в ClosetAuctions.dll Дополнительная информация: 'object' не содержит определения для ' LogoName ' "

var couponData = CorporateNonWinnerGiftBL.GetCouponDetailsbyCouponID(couponID);
 if (couponData != null)
 {
 string fileName = couponData.LogoName;
 }
2 ответа

"RuntimeBinderException" уже был дан ответ в следующих статьях, пожалуйста, обратитесь к нему.

https://social.msdn.microsoft.com/Forums/en-US/30b916bf-7e59-4d8d-b7bc-076d4289a018/type-inference-turns-my-vars-to-dynamic?forum=csharplanguage

Попробуйте под кодом:  открытый статический динамический метод GetCouponDetailsbyCouponID (Guid couponID)          {

using (var ********** = new Entities())
 {
 var nonWinnerGift = (from nw in **********.CorporateNonWinnerGift
 join um in **********.Users on nw.UserID equals um.Id
 where nw.IsDeleted != true && nw.CouponID == couponID
 select new
 {
 FullName = (um.FirstName + " " + um.LastName),
 Title = nw.Title,
 Description = nw.Description,
 LogoName = nw.LogoName,
 CouponID = nw.CouponID,
 IsDiscount = nw.IsDiscount,
 Discount = nw.Discount,
 Desclaiemer = nw.Desclaiemer
 }).SingleOrDefault();
 dynamic d = new ExpandoObject();
 d.FullName = nonWinnerGift.FullName;
 d.Title = nonWinnerGift.Title;
 d.Description = nonWinnerGift.Description;
 d.LogoName = nonWinnerGift.LogoName;
 d.CouponID = nonWinnerGift.CouponID;
 d.IsDiscount = nonWinnerGift.IsDiscount;
 d.Discount = nonWinnerGift.Discount;
 d.Desclaiemer = nonWinnerGift.Desclaiemer;
 return d;
 }
 }


Не рекомендуется использовать динамический объект в вашем случае использования. Но это мое мнение.

В любом случае, для доступа к члену динамического объекта,

string fileName = couponData.GetType().GetProperty("LogoName").GetValue(couponData, null);

licensed under cc by-sa 3.0 with attribution.