'object'不包含动态定义

Vis*_*iri 9 c# asp.net

我正在使用下面描述的方法.返回动态结果.

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();
Run Code Online (Sandbox Code Playgroud)

当我尝试访问"couponData.LogoName"而不是抛出动态运行时异常时.请在下面找到我的异常"ClosetAuctions.dll中发生类型'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的第一次机会异常 在此输入图像描述附加信息:'object'不包含'LogoName'的定义

                var couponData = CorporateNonWinnerGiftBL.GetCouponDetailsbyCouponID(couponID);

                if (couponData != null)
                {
                    string fileName = couponData.LogoName;
                }
Run Code Online (Sandbox Code Playgroud)

Ppp*_*Ppp 7

不建议在用例中使用动态对象.但这是我的看法.

无论如何,要访问动态对象的成员,

string fileName = couponData.GetType().GetProperty("LogoName").GetValue(couponData, null);
Run Code Online (Sandbox Code Playgroud)


Kau*_*eta 5

“RuntimeBinderException”已经在以下文章中得到解答,请参考。

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

尝试以下代码:

public static dynamic 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;
    }
}
Run Code Online (Sandbox Code Playgroud)