C# 将SQL转换为LINQ,以及如何在视图中显示新结果?
我必须回答以下问题: 1) 如何将此select转换为LINQC# 将SQL转换为LINQ,以及如何在视图中显示新结果?,c#,asp.net-mvc,asp.net-mvc-3,linq,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Linq,Razor,我必须回答以下问题: 1) 如何将此select转换为LINQ Select i.ID, i.Impression, (Select COUNT(ImpressionsId) from DiaryImpressions where DiaryPostsId = '2' AND ImpressionsId = i.ID) as Num from Impressions i 2) 我必须在一个循环中运行这个查询,在这个循环中,我可以替换真正的post ID的硬编码值2。但是我
Select i.ID, i.Impression,
(Select COUNT(ImpressionsId)
from DiaryImpressions
where DiaryPostsId = '2' AND ImpressionsId = i.ID) as Num from Impressions i
2) 我必须在一个循环中运行这个查询,在这个循环中,我可以替换真正的post ID的硬编码值2
。但是我如何在C#中使用MVC3实现这一点呢?有人能给我举个例子说明它在foreach循环中是如何工作的,以及我如何在视图中显示这个值吗
Thanx a lot=)您是否已经在MVC项目中设置了数据库上下文/存储库以与数据库通信?下面我假设您有一个名为dbContext的数据库上下文 注意:如果您没有使用Razor,请将“@”替换为“” 您可以将项目放在ViewBag中,也可以像下面这样放在模型(我更喜欢模型)中。我不确定你想对这些计数做什么,所以我把它们列在了一个列表中。你需要一个类来输入你的印象信息,我在下面添加了它 型号代码:
公共类MyModel
{
public class ImpressionInfo//只用于存储模型的结果子类
{
public ImpressionInfo(id、impression、diaryImpressionCount)
{
Id=Id;
印象=印象;
DiaryImpressionCount=DiaryImpressionCount
}
公共int Id{get;set;}
public int Impression{get;set;}//这是一个int吗?你没说
public int DiaryImpressionCount{get;set;}
}
公共MyModel()
{
var impressionInfo=新列表()
foreach(dbContext.DiaryImpressions中的变量di)
{
添加(新的印象派信息)(
身份证,
di.印象,
dbContext.DiaryPosts
.Count(dp=>dp.impressionId==di.ID));
}
}
公共列表ImpressionInfo{get;set;}
然后在视图中
查看代码:
@model-MyModel
@如果(Model.impressioninfo.Count>0)
{
印象
计数
foreach(Model.impressionInfo中的var i)
{
@i、 印象
@i、 日记账
}
}
其他的
{
无印象信息
}
希望这有帮助。您是否已经在MVC项目中设置了与数据库通信的数据库上下文/存储库?下面我假设您有一个名为dbContext的数据库上下文 注意:如果您没有使用Razor,请将“@”替换为“” 您可以将项目放入ViewBag或模型(我更喜欢模型)中,如下图所示。我不确定您希望如何处理这些计数,因此我已将它们放入列表中。您需要一个类来放入印象信息,我已将其添加到下面 型号代码:
公共类MyModel
{
public class ImpressionInfo//只用于存储模型的结果子类
{
public ImpressionInfo(id、impression、diaryImpressionCount)
{
Id=Id;
印象=印象;
DiaryImpressionCount=DiaryImpressionCount
}
公共int Id{get;set;}
public int Impression{get;set;}//这是一个int吗?你没说
public int DiaryImpressionCount{get;set;}
}
公共MyModel()
{
var impressionInfo=新列表()
foreach(dbContext.DiaryImpressions中的变量di)
{
添加(新的印象派信息)(
身份证,
di.印象,
dbContext.DiaryPosts
.Count(dp=>dp.impressionId==di.ID));
}
}
公共列表ImpressionInfo{get;set;}
然后在视图中
查看代码:
@model-MyModel
@如果(Model.impressioninfo.Count>0)
{
印象
计数
foreach(Model.impressionInfo中的var i)
{
@i、 印象
@i、 日记账
}
}
其他的
{
无印象信息
}
希望这有帮助。这是LINQ到SQL,还是您使用LINQ连接通过datareader检索的对象?这是LINQ到SQL,还是您使用LINQ连接通过datareader检索的对象?LINQ转换在哪里?=)在MyModel的构造函数中?这实现了SQL的功能?他只需要将数据库上下文设置为任意内容(Linq到SQL、实体框架、NHibernate或任意内容),MyModel的构造函数中的Linq转换在哪里?=)实现了SQL的功能?他只需要将数据库上下文设置为任意内容(Linq到Sql、实体框架、NHibernate或其他)
public class MyModel
{
public class ImpressionInfo //just used to store your results sub class of the model
{
public ImpressionInfo(id, impression, diaryImpressionCount)
{
Id = id;
Impression = impression;
DiaryImpressionCount = diaryImpressionCount
}
public int Id { get; set; }
public int Impression { get; set; } //is this an int? you didn't say
public int DiaryImpressionCount { get; set; }
}
public MyModel()
{
var impressionInfo = new List<ImpressionInfo>()
foreach (var di in dbContext.DiaryImpressions)
{
ImpressionInfos.Add(new ImpressionInfo(
di.Id,
di.Impression,
dbContext.DiaryPosts
.Count(dp => dp.ImpressionsId == di.ID));
}
}
public List<ImpressionInfo> ImpressionInfos { get; set; }
@model MyModel
@if(Model.ImpressionInfos.Count > 0)
{
<table>
<tr>
<td>Impression</td>
<td>Count</td>
</tr>
foreach (var i in Model.ImpressionInfos)
{
<tr>
<td>@i.Impression</td>
<td>@i.DiaryImpressionCount</td>
</tr>
}
}
else
{
<p>No Impression infos</p>
}