C# 如何在asp.net web api2中自定义响应

C# 如何在asp.net web api2中自定义响应,c#,asp.net-mvc,linq,asp.net-web-api,linq-to-entities,C#,Asp.net Mvc,Linq,Asp.net Web Api,Linq To Entities,添加这两行时,此函数中的问题 UserImage = GetImagePath(db.Users.FirstOrDefault(x => x.Id == p.User_ID).Image), InsertDate = p.InsertDate.ToString("dd/MM/yyyy") 我需要自定义图像路径和自定义日期格式,显示此问题。 LINQ to Entities无法识别方法System.String to字符串(System.String)方法,并且无法将此方法转换为存储表

添加这两行时,此函数中的问题

UserImage = GetImagePath(db.Users.FirstOrDefault(x => x.Id == p.User_ID).Image),  
InsertDate = p.InsertDate.ToString("dd/MM/yyyy")
我需要自定义图像路径和自定义日期格式,显示此问题。
LINQ to Entities无法识别方法
System.String to字符串(System.String)
方法,并且无法将此方法转换为存储表达式

private static string GetImagePath(string ImageName)
{
    return System.Configuration.ConfigurationManager.AppSettings["websiteurl"].ToString() + "/uploads/" + ImageName;
}

[HttpGet]
[Route("Comments")]
public IHttpActionResult Comments(string Post_ID)
{
    var list = db
        .ShalehComments
        .Where(p => p.Shaleh_ID == Post_ID && p.ParentID == 0)
        .Select(p => new {
            ID = p.ID,
            Comment = p.Comment,
            User = db.Users.FirstOrDefault(x=> x.Id == p.User_ID).FullName,
            UserImage = GetImagePath(db.Users.FirstOrDefault(x => x.Id == p.User_ID).Image),//here problem
            InsertDate = p.InsertDate.ToString("dd/MM/yyyy")//and here
    }).ToList();

    return Ok(
        new
        {
            result = true,
            data = list
        }
    );
}

发生此错误的原因是实体框架不知道如何执行
sql
中的
.ToString()
GetImagePath
方法。因此,您应该使用
ToList
加载数据。因此,您可以尝试以下方法:

[HttpGet]
[Route("Comments")]
public IHttpActionResult Comments(string Post_ID)
{
    var list = db
        .ShalehComments
        .Where(p => p.Shaleh_ID == Post_ID && p.ParentID == 0)
        .ToList()//add ToList
        .Select(p => new {
            ID = p.ID,
            Comment = p.Comment,
            User = db.Users.FirstOrDefault(x=> x.Id == p.User_ID).FullName,
            UserImage = GetImagePath(db.Users.FirstOrDefault(x => x.Id == p.User_ID).Image),
            InsertDate = p.InsertDate.ToString("dd/MM/yyyy")//and here
    }).ToList();

    return Ok(
        new
        {
            result = true,
            data = list
        }
    );
}

但是这种方法在性能上是昂贵的。还有其他更好的方法吗?还有一种方法可以将所有转换为SQL查询。但在EF中,当您执行sql查询时,它会返回
IEnumerable
,但它也很昂贵。所以我觉得它更好。@WebDeveloper一个存储过程?@PhilCooper如果你使用EF,那么结果和原始查询一样。你得到的结果是
IEnumerable