こんにちは最愛のコミュニティ:DSystem.NullReferenceException選択句で
今私は私の最初の大きなプロジェクトに取り組んでおり、ちょっと立ち往生しています。 入力を検証しようとしています。
var header = from name in v.Validate(it => it.Name).Required().MaxLength(Constants.String.NameLength)
from startDate in v.Validate(it => it.StartDate).Required().After(DateTime.Today)
from endDate in v.Validate(it => it.EndDate).Required().After(DateTime.Today)
from endTime in v.Validate(it => it.EndTime).BlockErrors().Required().ReplaceIfInvalid(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 30, 0))
from requestedCurrency in v.Validate(it => it.RequestedCurrency).Required()
from language1 in v.Validate(it => it.Language1).Required()
from language2 in v.Validate(it => it.Language2)
from language3 in v.Validate(it => it.Language3)
from hasMoreInformation in v.Validate(it => it.HasMoreInformation)
// TODOJP: If "hasMoreInformation" is true, then "moreInformationEmail" has to be required.
from moreInformationEmail in v.Validate(it => it.MoreInformationEmail).IsEmail()//.RequiredOr(p => !hasMoreInformation)
from isAnonymous in v.Validate(it => it.IsAnonymous)
select new AnnouncementHeader(
currentUser,
type,
name,
startDate,
endDate.SetTime(new Time(endTime.Hour, endTime.Minute)),
isAnonymous,
infoField,
requestedCurrency,
language1,
language2,
language3,
hasMoreInformation,
moreInformationEmail);
: "RequiredOr" 機能を呼び出すために
public Validatable<TProperty> Validate<TProperty>(
Expression<Func<TEntity, TProperty>> expr)
{
return new Validatable<TProperty>(
new ErrorTrackerWrapper(ErrorTracker, expr.Body), expr.Compile()(Value));
}
この部分:私はこれを使用している通常の検証のために
public static Validatable<string> RequiredOr(this Validatable<string> that, Func<Validatable<string>, bool> func)
{
return that.DoEvaluate && !(func(that) || that.Value != null)
? that.Error(ML.Get("Validation", "IsRequired"))
: that;
}
:したがって
私はこの機能を使用しています
これまでのところ正しいですが、「RequiredOr」部分の「hasMoreInformation」はどういう意味か教えてくれますNullReferenceException
エラーを "RequiredOr"機能までトレースすることができました。
"HasMoreInformation"が真であるかどうかを確認して、フィールドを "必須"に設定するかどうかを確認したいと思います。
私はあなたに何を伝えようとしているのか理解してくれることを願っています。 ご協力いただきありがとうございます。
Validate()のコードを投稿し、linqクエリ全体を投稿してください。どんなことが起こっているのかを推測するのは難しいです。タイトルにはselect句に問題があると書かれていますが、select句は含まれていません。 – phoog
コードを更新しました。 エラーはselect句にはありません。残念ですが、moreInformationEmailの "RequiredOr"部分にあります。 (コメント部分を見て) – KampfFussel
申し訳ありませんが、私はまだ混乱しています。 'Validate()'はIEnumerableを返しますか?それとも、クエリの理解構文に従う他の型を返しますか? – phoog