2017-01-30 9 views
-6

私はIdを取得したいが、私は名前しか持たない。 私のコードは次のようになります。ラムダ式

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

*を定義することはできません。コンパイル中にエラーが発生しましたか?あなたは 'using System.Linq;'を上に置いていますか? –

+0

コミュニティは何ですか? – ad1Dima

+0

'Where'はコレクションを返しますが、' FirstOrDefault'は 'bool'を必要とします。おそらく 'Where'の代わりに' Any'を使うか、 'Where'の後に' FirstOrDefault'を連鎖してほしいでしょう。正確には、「コミュニティ」と「コミック」が何であるかによって異なります。 – Abion47

答えて

1

linqを使って作業するときは、最初にロジックを簡素化して、ステップごとに分割してください。
だからまず、あなたはステートメントがそれに役立つCommunityName、とのすべての要素を見つける必要がある:

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

我々はそれらを得ました。次に、IDを持つ新しい配列(IEnumerable)が必要です。

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

です。あなたの次のステップは、まず、一つのレコードを取っている:

rawId = rawIds.First(); 

それがnullになる可能性があるため、今、あなたは、生の生の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'を変換できませんでした。私は疑問符を削除したので、うまくいきました。 –

+1

@Rikvola '?'は 'FirstOrDefault'がnullを返すかどうかをチェックするためのもので、' community'の要素のどれもが条件に合致しない場合に使用されます。それがnullを返した場合、このコードは '?'を付けずに例外をスローします。しかし、 '?'を使うと、行全体がnullを返す可能性があります。つまり、 'CommunityId'はNullable intまたは' int? 'でなければなりません。代わりに、三項演算子を使って行がヌルを返すかどうかを調べることができます。そうであれば、代わりに '-1'のようにデフォルト値を返します。 – Abion47