C# 房产价格下跌了一级
我对查询没有太大的问题,而是访问数据或设置数据以便将其传递给视图 这是表达式C# 房产价格下跌了一级,c#,linq,entity-framework,lambda,C#,Linq,Entity Framework,Lambda,我对查询没有太大的问题,而是访问数据或设置数据以便将其传递给视图 这是表达式 var distinctReplies = pd.Project.ProjectDoc .SelectMany(i => i.Comment .SelectMany(k => k.CommentReply .Select(u => u.User) ).Distinct() ).Selec
var distinctReplies = pd.Project.ProjectDoc
.SelectMany(i => i.Comment
.SelectMany(k => k.CommentReply
.Select(u => u.User)
).Distinct()
).Select(g => new {FirstName = g.FirstName, LastName = g.LastName, UserID = g.UserID})
.ToList();
在这个表达式之后,我想将它与另一个从同一用户模型中获取值的表达式连接起来,我想将distinctReplies分配给一个ViewBag变量,然后能够循环通过它并执行此操作
foreach(@ViewBag.distinctReplies中的var user)
在razor视图中
但是,要真正获得这些值,我必须执行distinctReplies。选择(I=>I.FirstName)
。不确定如何处理此问题。使用此选项:
@foreach (var reply in (IEnumerable)ViewBag.distinctReplies)
{
}
您不能枚举动态
的实例。将其强制转换为IEnumerable
,以允许该语句
有关更详细的解释,请参阅。我建议创建一些ViewModel对象来填充查询结果。能够访问
@foreach
循环内的属性
型号
public class UserVM
{
public int UserID{get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
}
更新的查询
var distinctReplies = ....
.Select(g => new UserVM {FirstName = g.FirstName,
LastName = g.LastName,
UserID = g.UserID}).ToList();
然后,在视图中,需要将强制转换添加到IEnumerable
查看
@foreach (var user in (IEnumerable<UserVM>) ViewBag.distinctReplies)
@foreach(在(IEnumerable)ViewBag.distinctReplies中的变量用户)
我不明白,到底是什么问题?这不完全是我所做的,但它让我走上了正确的道路,我在现有的viewmodel中添加了一个“用户”模型并分配了它,这很有效。如果你已经创建了一个模型,那么就不应该使用ViewBag。将模型集返回到视图:返回视图(“MyView”,mymodelset)代码>。当然,更好的方法是根本不把它放在ViewBag
中。并使用强类型视图。您将如何访问replyobject
的原始属性?此时您不能不进行反射。不应将匿名类型用作视图模型。实现@mipe34答案中建议的ViewModel。然后您可以将var
替换为YourType
。