2016-04-12 55 views
-1

我已經在代碼中看到過一次或兩次,但現在找不到示例。直到最近我還在webforms中工作,並已切換到MVC。我環顧四周,在這方面沒有發現很多。下面的代碼是從我的控制器獲取值並顯示在我的視圖模型中。我需要從MSMQ獲取m.body.MembersId。我知道問題是什麼,我只是不知道如何使用Linq。在同一行中鑄造和連接

情況,我需要在一條線上完成所有這些。將最初是名爲MembersId的列表的memberIds信息轉換回列表以顯示它,但也執行string.join,以便整個列表顯示爲一個字符串。雖然我知道如何自己做這兩件事,但在一條線上做的事情證明超越了我。我會公開承認我對linq相當陌生,並且正在學習。 這是類

public class MsgChildClass{ 
    public string SourceSystem { get; set; } 
    public List<string> MemberIds { get; set; } 
    public string ParentId { get; set; } 
    public string Error { get; set; } 
} 

這是功能

public ActionResult GetAllMessages() { 

     string queueName = (ViewBag.QueueName != null) ? ViewBag.QueueName : Request.QueryString["queueName"]; 
     Session["CurrentQueueName"] = queueName; 
     TempData["queueName"] = queueName; 
     ViewBag.QueueName = queueName; 

     var queue = _Queues[queueName]; 

     queue.MessageReadPropertyFilter.ArrivedTime = true; 
     queue.MessageReadPropertyFilter.Body = true; 
     queue.Formatter = new JsonMessageFormatter(); 

     var messages = queue.GetMessages(); 

     var model = messages.Select(m => 
        new ViewModel() { 
         Id = m.Id, 
         Date = m.ArrivedTime, 
         SourceSystem = ((MsgChildClass)m.Body).SourceSystem, 
         DeletedMemberIds = ((MsgChildClass)m.Body).DeletedMemberIds,//OrderByDescend(x => x);    string.Join(",",((MsgChildClass)m.Body).DeletedMemberIds), 
         ParentMemberId = ((MsgChildClass)m.Body).ParentId, 
         Error = ((MsgChildClass)m.Body).Error, 
         QueName = queueName 
        }).ToList(); 
     return Json(model.ToList(), JsonRequestBehavior.AllowGet); 
     } 

視圖模型

public class ViewModel 
{ 
    [Required] 
    public string Id { get; set; } 

    //[Required] 
    [Display(Name = "Arrival Time")] 
    public DateTime Date { get; set; } 

    [Required] 
    [Display(Name = "Source System")] 
    public string SourceSystem { get; set; } 

    [Required] 
    [Display(Name = "Member Ids")] 
    public List <string> MemberIds { get; set; } 


    [Required] 
    [Display(Name = "Parent Member Id")] 
    public string ParentMemberId { get; set; } 

    [Display(Name = "Error")] 
    public string Error { get; set; } 

    [Display(Name = "QueName")] 
    public string QueName { get; set; } 



} 

這就是我。除了成員身份之外,所有的工作都正常。調試表明,成員身份有價值,但我沒有深入鑽研。所以希望有人可以幫助我,因爲在這一點上已經有很多小時了。谷歌很棒,但他沒有幫我解決這個問題。

+4

你確定它不只是一個錯字嗎?你在'((MsgChildClass)m.Body).MemberIds'後面缺少''''。 –

+0

@Joel什麼類型是((MsgChildClass)m.Body).MemberIds'?你現在的代碼有什麼問題? – har07

+0

@AlexanderDerck那只是從錯誤複製和粘貼輸入錯誤 – Joel

回答

0

該代碼是正確的,這是令人生厭的部分。調試器告訴我值已存在。但是我沒有看到的部分是datatable.js如何加載數據以供顯示。看到這是做不正確的,我糾正它,現在列表現在顯示爲字符串,字符串,字符串這是我所需要的,所以感謝每一個

0

如果您只投入一次變量,它會更乾淨更高效。另一個優點是您可以添加一個斷點並查看msgChild

var model = messages.Select(m => 
{ 
    var msgChild = (MsgChildClass)m.Body; 

    return new ViewModel 
    { 
     Id = m.Id, 
     Date = m.ArrivedTime, 
     SourceSystem = msgChild.SourceSystem, 
     MemberIds = msgChild.MemberIds, 
     ParentMemberId = msgChild.ParentId, 
     Error = msgChild.Error, 
     QueName = queueName 
    }; 
}).ToList(); 
+0

我已編輯並顯示更多的代碼。爲了更好地解釋我的情況,我有 – Joel