2011-11-11 62 views
1

我對此提問:將SQL轉換爲LINQ以及如何在視圖中顯示新結果?

1)如何將此選擇轉換爲LINQ?

Select i.ID, i.Impression, 
(Select COUNT(ImpressionsId) 
    from DiaryImpressions 
    where DiaryPostsId = '2' AND ImpressionsId = i.ID) as Num from Impressions i 

2)我要運行一個循環,我可以代替硬編碼值2爲真實後ID這裏面查詢。但我怎麼能在C#中使用MVC3做到這一點?有人可以給我任何例子,說明它在foreach循環中的工作方式,以及如何在視圖中顯示此值?

感謝名單了很多=)

+0

這是LINQ到SQL,還是你使用LINQ來加入你的對象通過datareader檢索? –

回答

1

你是否已經有了一個數據庫上下文/庫建立在你的MVC項目數據庫進行通信?下面我假設你有一個名爲dbContext的數據庫上下文。

注:如果你不使用剃刀,取代「@」與「<%」並關閉所有與「%>」

您可以把項目的ViewBag,或在模型(我更喜歡模型)如下。我不確定你想要做什麼,所以我把它們放在一個列表中。你需要一個課程來放置你的印象信息,我已經在下面添加了它;

型號代碼:

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> 
    } 

希望這有助於。

+0

LINQ轉換在哪裏? =) –

+0

在MyModel的構造函數中?這實現了他的SQL呢?他只需要將他的數據庫上下文設置爲任何它(Linq-To-Sql,Entity Framework,NHibernate或其他) – mattytommo