0

エンティティ クエリがあります。

Location location = new Location();

var loc = from l in location.name
          where location.active = true
          select l;

return View(loc.ToList());

name と active の両方が null であるため、コードを実行すると問題がスローされます。これは問題ありませんが、言い方はありますか: 空のリターンでない場合は? locそれを返す前に空かどうかを尋ねるのと同じくらい簡単でしょうか?

もしそうなら、どうすればいいですか?

詳細

エラーが発生しています:

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentNullException: 値を null にすることはできません。パラメータ名: ソース

これはオンラインで発生します:

var loc = (from l in location.name

私のコンテキストクラスは次のようになります。

using System;
using System.Data.Entity;
using LocationApp.Models;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace LocationApp.DAL
{
    public class LocationAppContext : DbContext
    {
        public DbSet<Content> Contents { get; set; }
        public DbSet<Location> Locations { get; set; }
        public DbSet<ServiceAssignment> ServiceAssignments { get; set; }
        public DbSet<Service> Services { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

注:このアプローチはコードファーストアプローチを使用しています。データベースには場所のエントリが1つあり、名前があり、「アクティブ」がtrueに設定されています。ですから、なぜこれが急増しているのかわかりません。

4

3 に答える 3

0

Linq クエリのソース コレクションはによってIEnumerable<char>実装されておりstring(おそらく)、文字のリストをビューに返します。(本当にこれが欲しいの?)Location.Namestring

とにかく、ソース コレクションは であってはなりませんnull。Linq クエリの前に、このケースをキャッチする必要があります。その場合、nullこの Linq クエリはまったく使用できません。

Location location = new Location();

List<char> loc = null;
if (location.name != null)
    loc = (from l in location.name
           where location.active.HasValue && location.active.Value
           select l).ToList();
else
    loc = new List<char>();

return View(loc);

しかし、これは Entity Framework とは何の関係もありません。これは単なるメモリ内クエリ (LINQ-to-Objects) です。

于 2013-04-11T20:37:03.310 に答える
0

デフォルトのコンストラクターでフィールド/プロパティを設定しない場合、場所は常にnullになります

これを試して

var location = new Location { name= "dsd", active = true};

var tmp = location.FirstOrDefault(x=>x.active);

var loc = tmp == null ? String.Empty : tmp.name;
于 2013-04-11T20:15:33.997 に答える