1

1 つのアイテムを返す linq クエリがあります。私が行うmyList.Select(p => p.ID)と、null 参照例外がスローされますが、問題ありませんmyList.First().ID。私もすでに試しmyList.ToList().Select(p => p.ID)て失敗しました。

最も奇妙なことは、それが別のPCで動作することです...

何か案が?

コードの更新

   var test = A2012_DomainDB.GetGadgetDomainsForUser(userID);
   var viewableGadgetIDs = test.Where(p => p != null).Select(p => p.GadgetID); // this line fails 

public static IEnumerable<A2012_Domain_Gadget> GetGadgetDomainsForUser(int userID)
    {
        var db = Database_Factory.EVISION_EMAGINE_DB;
        var viewableDomainIDs = GetDomainsForUser(userID).Select(p => p.DomainID);
        var result = db.A2012_Domain_Gadget.Where(p => viewableDomainIDs.Contains(p.DomainID));
        return result;
    }

  public static List<A2012_Domain> GetDomainsForUser(int userID)
    {
        var db = Database_Factory.EVISION_EMAGINE_DB;
        List<int> viewableIDs = new List<int>();
        List<A2012_Domain> domains = new List<A2012_Domain>();

        viewableIDs.AddRange(db.A2012_Domain_User.Where(p => p.UserID == userID).Select(p => p.DomainID));                        

        viewableIDs.ForEach(i =>
        {
            domains.Add(db.A2012_Domain.Where(p => p.DomainID == i).Single());
        });

        return domains;
    }
4

1 に答える 1

3

これがどこから来るのか正確にはわかりません。返されたGetGadgetDomainsForUserを実際に繰り返すまでクエリを延期する必要がありますviewableGadgetIDsが、その行を実行するだけで例外が発生することを示唆しているようです。

私が本当に提案できるのは、すべてのラムダ式をnullガードすることです。

var result = db.A2012_Domain_Gadget
                 .Where(p => p != null)
                 .Where(p => viewableDomainIDs.Contains(p.DomainID));

と:

viewableIDs.AddRange(
    db.A2012_Domain_User
        .Where(p => p != null)
        .Where(p => p.UserID == userID)
        .Select(p => p.DomainID));                        

viewableIDs.ForEach(i =>
{
    domains.Add(
        db.A2012_Domain
           .Where(p => p != null)
           .Where(p => p.DomainID == i)
           .Single());
});

エラーはここから来ていると言いたくなるでしょう:

var result = db.A2012_Domain_Gadget.Where(p => viewableDomainIDs.Contains(p.DomainID));

おそらく、へのクエリdbはnullアイテムを生成し、それはp.DomainIDnullチェックなしで使用されます。

于 2012-07-26T11:33:13.860 に答える