C# 将SQL转换为LINQ,以及如何在视图中显示新结果?

C# 将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。但是我

我必须回答以下问题:

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
。但是我如何在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>
    }