を返さない場合は、デフォルト値を返すにはどうすればよい:あなたはDefaultIfEmpty値を追加するにはどうすればよいLINQのエンティティへのクエリは、このようなエンティティ表現にLINQでは値
var vote = (from vote in db.Vote where
vote.Voter.Id == user.Id
select v).FirstOrDefault();
いるので、私は「NO投票がないときdはデフォルト値を取得しますか?
を返さない場合は、デフォルト値を返すにはどうすればよい:あなたはDefaultIfEmpty値を追加するにはどうすればよいLINQのエンティティへのクエリは、このようなエンティティ表現にLINQでは値
var vote = (from vote in db.Vote where
vote.Voter.Id == user.Id
select v).FirstOrDefault();
いるので、私は「NO投票がないときdはデフォルト値を取得しますか?
:Vote
が参照型であるため、デフォルト値としてnullを使用している場合
var vote = db.Vote.FirstOrDefault(v => v.Voter.Id == user.Id) ?? defaultVote;
独自の拡張方法を追加します。例えば:範囲内のそのクラスに
public static class Extension
{
public static T FirstOrDefault(this IEnumerable<T> sequence, T defaultValue)
{
return sequence.Any() ? sequence.First() : defaultValue;
}
}
、あなたが言うことができます。もちろん
var vote = (from vote in db.Vote where
vote.Voter.Id == user.Id
select v).FirstOrDefault(yourDefaultValue);
をそれが何をどこであれば、あなたの方法はまた、デフォルト(T)を返し、過負荷を持つことができます探している。組み込みのExtensionクラスには既にDefaultIfEmpty拡張メソッドが定義されているので、 "FirstOrDefault"というサンプルにメソッドの名前を付けました。
最初の要素を取得する前にデフォルト値を追加するだけです。あなたは今、安全First()
の代わりFirstOrDefault()
を使用することができます
var vote = db.Vote
.Where(v => v.Voter.Id == user.Id)
.DefaultIfEmpty(defaultVote)
.First();
注意。エンティティへ
UPDATE
LINQはDefaultIfEmpty()
拡張メソッドを認識しません。しかし、ヌル合体演算子を使うことができます。私は非常に単純なアプローチのために行くことになった
var vote = (db.Vote
.Where(v => v.Voter.Id == user.Id)
.FirstOrDefault()) ?? defaultVote;
デフォルトを追加するときにFirstを使用できる場合、なぜFirstOrDefaultが存在するのですか? – Pablo
LINQ演算子の多くは多少冗長です - sequence.Any()はsequence.Count()> 0として書き直すことができます。sequence.Where(item => Condition(item))。First()またはsequence.First (項目=>条件(項目))。ジョインまたはネストされたクエリを使用できます。コードを書くときにfor、do、whileループを使うことができます。あなたはgotoを使うことさえできます。通常、目標を達成するための方法は1つだけではありません。 –
seq.Count()(ICollectionを実装していないオブジェクトの場合)は、完全なシーケンスを列挙しますが、seq.Any()は要素が見つかるとすぐに戻ります。類似しているが異なる。:) – dahlbyk
別のアプローチは、null合体演算子を使用することですこれは消去後者だったここでの答えで推奨されていた:私はリスト、Defaultifempty(に結果セットを有効にした場合、いくつかの理由で
var vote = (from vote in db.Vote
where vote.Voter.Id == user.Id
select v).FirstOrDefault();
if (vote == null) {
vote = new Vote() { .... };
db.AddToVoteSet(vote);
}
)私はinadveした場合に動作し、私は知りません間違いなくLinq地域に渡った。
var results = (from u in rv.tbl_user
.Include("tbl_pics")
.Include("tbl_area")
.Include("tbl_province")
.ToList()
where u.tbl_province.idtbl_Province == prov
select new { u.firstName, u.cellNumber, u.tbl_area.Area, u.ID, u.tbl_province.Province_desc,
pic = (from p3 in u.tbl_pics
where p3.tbl_user.ID == u.ID
select p3.pic_path).DefaultIfEmpty("defaultpic.jpg").First()
}).ToList();
参考までに、これは元の質問を満たしていませんでした。既定値を返すよう明示的に要求し、まだ存在していない場合は新しい値を作成しません。 (これは良いコードですが、あなたが尋ねたことはしません。) – BenSwayne