在中使用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。如有任何帮助,我们将不胜感激。
在解析查询之前,不能使用该方法或类似方法,因为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();