我正在编写我的第一个ASP.NET MVC应用程序。我正在从一堆表中检索用户数据,我需要确保只返回与当前经过身份验证的用户相关的数据。我发现自己做了很多重复的代码,特别是在我的LINQ查询中 - 我总是要加入AspNetUser的ID字段,所以我只获得当前经过身份验证的用户拥有的数据。没有每个用户拥有自己的表,有一个很好的方法,所以我可以编写LINQ查询而无需添加条件,如:
2
我的直觉告诉我必须有一个更好的方法,但谷歌出现的很少。
由于 托马斯
答案 0 :(得分:0)
您可以根据需要创建包装类。请参阅斯科特的评论,该评论可能会回答您。 (我无法链接到确切的评论。在页面中搜索关键字'已验证的')
http://weblogs.asp.net/scottgu/linq-to-sql-part-8-executing-custom-sql-expressions
答案 1 :(得分:0)
您不需要加入表格即可拥有如此简单的条件。 当你加入LINQ时,你基本上正在做
选择...... 来自table1 t1 innerjoin table2 t2 在t1.UserID = t2.UserID
那么为什么不能只使用你的UserID字段?
您可以在表格中将UserID作为外键,然后您不需要将它们连接在一起。
将您的代码更改为:
(来自....
WHERE db.UsersID == Customers.AccountOwnerID
选择......)
如果您没有外键,最好拥有它。您可以将它添加到数据库中的表中,也可以在“LINQ数据对象模型”中添加外键
答案 2 :(得分:0)
如果您使用Entity Framework构建模型,那么有一种更简单的方法。在实体模型中,您可以在关联的名称中创建表之间的关系。然后在您的代码中,您可以直接访问表,而无需使用user表中的userID列创建连接条件。
最终结果LINQ将如下所示:
(from Customer.address
select ...)
其中地址是另一个与Customers表关联的表,其中 Customer 是您在Customers表中保存当前客户数据的对象。