2017-01-30 190 views
-6

我想獲得Id,但我只有名稱。 我的代碼如下所示:lambda表達式

var comments = new List<Comments> 
     { 
      new Comments{ 
       CommunityId = community.FirstOrDefault(comid => comid.IdCommunity.Where(comid.CommunityName == "TestCommunity")), 
      } 
     }; 

評論是一類:

public class Comments 
{ 
    public int IdComment { get; set; } 
    public DateTime Timestamp { get; set; } 
    public string Text { get; set; } 
    public int UserId { get; set; } 
    public int CommunityId { get; set; } 
} 

社區以及:

public class Community 
{ 
    public int IdCommunity { get; set; } 
    public string CommunityName { get; set; } 
    public Pictures Picture { get; set; } 
} 

但是,在C#中是不能接受的。 我需要做什麼?

+1

定義*不接受*。編譯時出錯?你有'使用System.Linq;'坐在上面? –

+0

你能提供什麼社區? – ad1Dima

+0

'Where'返回一個集合,但'FirstOrDefault'需要一個'bool'。你可能想要使用'Any'而不是'Where',或者在'Where'後面鏈接'FirstOrDefault'。正是這取決於'community'和'comid'是什麼。 – Abion47

回答

1

當你使用LINQ的嘗試工作,以簡化第一邏輯,並打破它的步驟。
因此,首先,你需要找到與社區名稱,所有的元素Where語句將用它幫助:

var commList = community.Where(com => com.CommunityName == "TestCommunity"); 

現在commList我們得到了他們。其次,您需要使用Ids的新數組(IEnumerable):

rawIds = commList.Select(x=>x.IdCommunity); 

那就是它。您的下一步首先記錄一條記錄:

rawId = rawIds.First(); 

現在您已經有原始ID,因爲它可能爲空。你需要檢查它的空:

int Id; 
if(rawId==null) 
    Id = -1; 
else 
    Id = Convert.ToInt32(rawId); 

上面記錄可以簡化:

int Id = rawId == null? -1 : Convert.ToInt32(rawId); 

現在剛剛加入所有linqs一步一步:

rawId = community.Where(com => com.CommunityName == "TestCommunity").Select(com => com.IdCommunity).First(); 
int id = rawId == null ? -1 : Convert.ToInt32(rawId); 
+0

夥計們,當你打-1時,至少留下評論爲什麼。此代碼工作100%,這是一個問題的答案。 – Sergio

+0

謝謝,它運作良好。 –

+0

這不是我,但我的猜測是,這個答案是一個代碼轉儲,沒有解釋爲了使它工作而改變了什麼。 – Abion47

0

嘗試:

var comments = new List<Comments> 
     { 
      new Comments{ 
       CommunityId = community.FirstOrDefault(comid => comid.CommunityName == "TestCommunity")?.IdCommunity, //CommunityId should be nullable 
      } 
     }; 
+0

感謝您的幫助,但我正在爲'''我得到的錯誤是不能轉換'int?'以'int',所以我刪除了問號,它的工作。 –

+1

@Rikvola'?'用於檢查'FirstOrDefault'是否返回null,如果'community'中的元素都不符合條件,則返回null。如果它返回null,那麼這段代碼將拋出一個沒有'?'的異常。然而,對於'?',整行有可能返回null,這意味着'CommunityId'必須是Nullable int或'int?'。或者,可以使用三元運算符來檢查該行是否返回null,如果是,則返回一個默認值,例如'-1'。 – Abion47