2015-09-02 15 views
6

Używam poniżej opisanej metody. To zwraca wynik dynamiczny."Obiekt" nie zawiera definicji dynamicznej

public static dynamic GetCouponDetailsbyCouponID(Guid couponID) 
     { 
      using (var loEntities = new Entities()) 
      { 
       dynamic nonWinnerGift = (from nw in loEntities.CorporateNonWinnerGift 
             join um in loEntities.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(); 

Kiedy próbuję uzyskać dostęp do „couponData.LogoName” niż rzucony dynamicznego wyjątku czasu wykonywania. Proszę znaleźć poniżej mojego wyjątkiem „Pierwsza szansa wyjątek typu«Microsoft.CSharp.RuntimeBinder.RuntimeBinderException»wystąpił w ClosetAuctions.dll enter image description here Informacje dodatkowe:«obiekt»nie zawierają definicji«LogoName»”

   var couponData = CorporateNonWinnerGiftBL.GetCouponDetailsbyCouponID(couponID); 

       if (couponData != null) 
       { 
        string fileName = couponData.LogoName; 
       } 
+0

Dlaczego używasz kodu dynamicznie wpisany do przekazywania danych wokół? To nie jest javascript. – dcastro

+0

Mam dwie klasy i chcę wrócić w połączeniu oba parametry przy użyciu kwerendy linq. I nie chcę tworzyć oddzielnej klasy. Więc proszę, zasugeruj mi, co muszę zrobić. –

+0

Zamiast tego można na przykład zwrócić klasę zagregowaną. 'class Wynik {publiczny WinnerGift WinnerGift {get; zestaw; } public User User {get; zestaw; }} ' – dcastro

Odpowiedz

2

"RuntimeBinderException" został już odebrany w poniższych artykułach, zapoznaj się z nim.

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

Spróbuj poniżej kodu: public static dynamiczny GetCouponDetailsbyCouponID (GUID couponID) {

        using (var loEntities = new Entities()) 
            { 
             var nonWinnerGift = (from nw in loEntities.CorporateNonWinnerGift 
             join um in loEntities.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; 
     } 
    } 
+0

A Plus za przeczytanie pytania i kodu! lol Świetna odpowiedź! –

3

Nie jest wskazane, aby korzystać z dynamicznego obiektu w przypadku użycia. Ale to jest moja opinia.

W każdym razie, aby uzyskać dostęp do elementu dynamicznego obiektu

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

Czy możesz wyjaśnić mi "d"? ** GetValue (d, null) ** –

+0

Przepraszamy, edytowane. to jest przedmiot. – Ppp

+1

Dziękuję za szybką odpowiedź. Naprawdę bardzo doceniam i działa. –

Powiązane problemy