在中使用Lambda表达式进行Html解码网

本文关键字:Html 解码 表达式 Lambda | 更新日期: 2023-09-27 17:57:47

我正在尝试解码lambda表达式中的HTML,但它给出了以下错误:

LINQ to Entities无法识别方法"System.String HtmlDecode(System.String)"方法,并且此方法无法转换为存储表达式。

我使用的代码如下:

OtherUserInformation userData = db.Users
    .Where(u => u.UserID.Equals(inputUserid))
    .Select(x => new OtherUserInformation
    {
        Address = x.location == null ? "" : x.location,
        UserPic = db.UserProfile
            .Where(u => u.UserID.Equals(x.UserID))
            .Select(y => y.profileImg)
            .FirstOrDefault() == null 
                ? profileImagePath + "140_profile_default.jpg" 
                : profileImagePath + "140_" + db.UserProfile
                    .Where(u => u.UserID.Equals(x.UserID))
                    .Select(y => y.profileImg)
                    .FirstOrDefault(),
        CoverPic = db.UserProfile
            .Where(u => u.UserID.Equals(x.UserID))
            .Select(y => y.CoverImg)
            .FirstOrDefault() == null 
                ? coverImagePath + "812_cover_default.jpg" 
                : coverImagePath + coverPicPrefix + db.UserProfile
                    .Where(u => u.UserID.Equals(x.UserID))
                    .Select(y => y.CoverImg)
                    .FirstOrDefault(),
        Detail = db.UserProfile
            .Where(u => u.UserID.Equals(x.UserID))
            .Select(y => y.About).FirstOrDefault() == null 
                ? "" 
                : WebUtility.HtmlDecode(db.UserProfile
                    .Where(u => u.UserID.Equals(x.UserID))
                    .AsEnumerable()
                    .Select(y => y.About)
                    .FirstOrDefault()),
        FollowerCount = db.FollowUser
            .Where(u => u.FriendId.Equals(x.UserID) && u.FollowStatus.Equals(1))
            .Count(),
        Name = x.FirstName + " " + x.LastName,
        IsFollow = db.FollowUser
            .Where(u => u.UserId.Equals(userAuthInfo.UserId) 
                && u.FriendId.Equals(inputUserid) 
                && u.FollowStatus.Equals(1))
            .Select(z => z)
            .FirstOrDefault() == null ? "False" : "True",
    })
    .FirstOrDefault();

在上面的代码中,我需要有HTML编码数据的"Detail"字段。但我无法在lambda表达式中解码html。如有任何帮助,我们将不胜感激。

在中使用Lambda表达式进行Html解码网

在解析查询之前,不能使用该方法或类似方法,因为sql对该程序集一无所知。如果它不是EntityFunction,则必须在解析后重新投影列表。如果你使用像AutoMapper这样的数据映射器,你可以在重投影中使用它并在那里进行调用,但如果你需要手动执行,请在调用toList()后执行。

        db.Users.Select(x=>new YourObject{//data})
        .ToList()
    .Select(x=>new YourObject{
       //now you can use whatever methods you want from whatever assemblies you want
       SomePropertyValue = x.SomePropertyValue,
       SomeOtherValue = SomeAssembly.SomeMethod(x.SomeOtherValue)
});

我得到了解决方案,并在上面的查询底部添加了几行代码,如下所示:

})。FirstOrDefault()。AsEnumerable()。选择(x=>new OtherUserInformation{

                        Address = x.Address,
                        UserPic = x.UserPic,
                        CoverPic = x.CoverPic,
                        Detail = Regex.Replace(x.Detail, "<.*?>", string.Empty),
                        FollowerCount = x.FollowerCount,
                        Name = x.Name,
                        IsFollow = x.IsFollow,
                        Categories = x.Categories,
                        Followers = x.Followers
                    }).FirstOrDefault();

上面的解决方案对我有效。快乐的编码:)

尝试HttpUtility。HtmlDecode方法代替

http://msdn.microsoft.com/en-us/library/system.web.httputility.htmldecode(v=vs.110).aspx

或者按照下面的例子尝试解码Select方法中的字段:

OtherUserInformation userData = db.Users.Where(u => u.UserID.Equals(inputUserid)).Select(x => new OtherUserInformation
                    {
                        Address = x.location == null ? "" : x.location,
                       // UserPic = Utilities.ImagePathForProfileForUserByDiviceType(db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.profileImg).FirstOrDefault(),deviceType),
                       // CoverPic = Utilities.ImagePathForCoverImageForUserByDiviceType(db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.CoverImg).FirstOrDefault(), deviceType),
                        UserPic = db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.profileImg).FirstOrDefault() == null ? profileImagePath + "140_profile_default.jpg" : profileImagePath + "140_" + db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.profileImg).FirstOrDefault(),
                        CoverPic = db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.CoverImg).FirstOrDefault() == null ? coverImagePath + "812_cover_default.jpg" : coverImagePath + coverPicPrefix + db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.CoverImg).FirstOrDefault(),
                        Detail = db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).Select(y => y.About).FirstOrDefault() == null ? "" : db.UserProfile.Where(u => u.UserID.Equals(x.UserID)).AsEnumerable().Select(y => WebUtility.HtmlDecode(y.About)).FirstOrDefault(),
                        FollowerCount = db.FollowUser.Where(u => u.FriendId.Equals(x.UserID) && u.FollowStatus.Equals(1)).Count(),
                        Name = x.FirstName + " " + x.LastName,
                        IsFollow = db.FollowUser.Where(u => u.UserId.Equals(userAuthInfo.UserId) && u.FriendId.Equals(inputUserid) && u.FollowStatus.Equals(1)).Select(z => z).FirstOrDefault() == null ? "False" : "True",

                        })

                    }).FirstOrDefault();