MVC LINQ,其中UserID等于经过身份验证的用户

时间:2016-05-08 13:22:11

标签: c# asp.net-mvc entity-framework linq

我在一个带有MVC的表中列出了我的SQL Server数据库中的一些数据。我需要的是只能显示UserID等于实际经过身份验证的用户的数据。

这是我此时所做的:

 public class ManageViewModel
  {
    public string FileName { get; set; }

    public string ContentType { get; set; }

    public string Format { get; set; }
  }

我的观点:

@model IEnumerable<Transcode.Models.ManageViewModel>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<table style="width:100%">
    <tr>
        <th>File Name</th>
        <th>Actual Format</th>
        <th>Requested Format</th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.FileName</td>
            <td>@item.ContentType</td>
            <td>@item.Format</td>
        </tr>
    }
</table>

我的控制器和LINQ查询:

public class ManageController : Controller
{
    ApplicationDbContext db = new ApplicationDbContext();
    public ActionResult Index()
    {
        var Model = from file in db.Conversions
                    join codec in db.Codecs on file.CodecID equals codec.CodecID
                    where file.UserID.Equals(User.Identity.IsAuthenticated)
                    select new ManageViewModel
                    {                            
                        FileName = file.FileName,
                        ContentType = file.ContentType,
                        Format = codec.Format
                    };
        return View(Model);

    }
}

我的@foreach(模型中的var项目)出现以下错误:

EntityFramework.SqlServer.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理 附加信息: 无法创建“System.Object”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

1 个答案:

答案 0 :(得分:4)

这里你要比较苹果(整数)和橙子(布尔值):

where file.UserID.Equals(User.Identity.IsAuthenticated)

您不应该将苹果(整数)与苹果(整数)进行比较吗?因此,您可以首先使用GetUserId()扩展方法获取当前经过身份验证的用户的ID:

string userId = this.User.Identity.GetUserId();

然后将其转换为整数或标识符的基础类型:

int id = int.Parse(userId);

然后你可以在你的LINQ子句中进行比较:

where file.UserID == id

最后但并非最不重要的是,由于您要与用户打交道,因此应使用Index属性修饰[Authorize]操作,以确保只有经过身份验证的用户才能调用它:

[Authorize]
public ActionResult Index()
{
   ...
}