2014-05-14 18 views
0

回報和價值我創造了這個循環中的MVC:循環,在MVC

//this identify my user 
string tmpUser = System.Web.HttpContext.Current.User.Identity.Name; 

//this find user in database and compare his username with Identity name and returns userID 
using (var dbUs = new userDbEntities()) 
{ 
    var whoisloged = (from user in dbUs.UsersTables 
    where user.username == tmpUser 
    select user.userID).FirstOrDefault(); 

    //get all destinations for user userid 
    var list1 = dbUs.CustomerTables.Where(m => m.UserId == whoisloged).Select(m => m.Customer); 

    var list2 = dbUs.CustomTypes.Where(m => list1.Contains(m.Id_NewCustomerType)).Select(m => m.CustomerType); 

    //this is LOOP that must return my values 
    foreach (var customer in list2) 
    { 
     string test = customer; 
     return new SolrQuery(test); 
    } 

現在的問題是在我的LOOP的foreach ...爲什麼只返回第一個值?不管我在數據庫中有更多的數據。

我的結果sholud是這樣的:

例如用戶有人在應用程序中登錄。他/她在數據庫中保存了他/她的角色(代碼中的CustomerTable),例如, A,B和C,因此循環應該返回我是這樣的:

return new SolrQuery(A) + return new SolrQuery(B) + return new SolrQuery(C); // + is refer as AND 

真的感謝您的幫助和任何想法...

+0

我看到,我不需要「字符串測試=客戶」,我把回報新SoleQuery(客戶),但結果是一樣的,僅返回一個結果... –

+0

但沒有返回句子... foreach返回正確的所有值。 –

+0

你能顯示SolrQuery(test)的定義嗎? –

回答

1

第一回離開不僅在foreach,但整體功能(作爲回報打算做)。如果要在循環中執行多個查詢,則必須收集結果並在之後將其返回...

string result =""; 
foreach (var customer in list2) 
{ 
    result = result + new SolrQuery(customer); 
} 
return result; 

應該這樣做。

+0

它在句子result = result + ...中強調了第二個結果,並且說:局部變量'result'在訪問之前可能不會被初始化......那是什麼意思是... –

+0

然後初始化它(參見上面的示例)。 –

+0

好吧,有幫助,但現在下劃線的最後結果返回結果與此錯誤:無法將表達式類型'字符串'轉換爲返回類型'SolrNet.ISolrQuery'...真的謝謝你幫助我,你的想法似乎有用,所以我標記你的答案是有用的 –

1

麻煩的是: -

return new SolrQuery(test); 

返回單個SolrQuery然後退出破了你的循環功能

你可能想要做的是改變你的方法簽名: -

public SolrQuery MyMethod(...) 

到: -

public IEnumerable<SolrQuery> MyMethod(...) 

,表明你想要的方法返回一個序列項目,而不是一個單一的。

然後你就可以使用yield關鍵字創建序列: -

foreach (var customer in list2) 
{ 
    yield return new SolrQuery(customer); 
} 

或者,更好的,你可以回到你的LINQ查詢的結果(這已經是一個序列)。替換: -

var list2 = dbUs.CustomTypes.Where(m => list1.Contains(m.Id_NewCustomerType)) 
          .Select(m => m.CustomerType); 

有: -

return dbUs.CustomTypes.Where(x => list1.Contains(x.Id_NewCustomerType)) 
         .Select(x => new SolrQuery(x.CustomerType)) 
         .ToList(); 

,然後刪除後一切。

0

我必須解決這個問題:

  List<string> result = new List<string>(); 

      foreach (var customer in seznam2) 
      { 
       result.Add(customer); 
      } 

      SolrQueryInList queryInList = new SolrQueryInList("destination", result); 

      return queryInList; 
+0

你會不會更好,只是做'新的SolrQueryInList(「目的地」,seznam2);'而不是傾倒從一個列表到另一個列表的所有內容? –