C# 表达式的结果总是正确的
我在linq中做了一个左连接,UserId的值可以为null(不在表中),但是在连接中,VisualStudio显示了这个警告 我认为这是一个误判,因为当userid为null时,代码运行良好,而select为false 用户特权类C# 表达式的结果总是正确的,c#,.net,visual-studio,linq,C#,.net,Visual Studio,Linq,我在linq中做了一个左连接,UserId的值可以为null(不在表中),但是在连接中,VisualStudio显示了这个警告 我认为这是一个误判,因为当userid为null时,代码运行良好,而select为false 用户特权类 //------------------------------------------------------------------------------ // <auto-generated> // This code was gener
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
public partial class UserPrivileges
{
public int Id { get; set; }
public int UserId { get; set; }
public int PrivilegeId { get; set; }
public virtual Privileges Privileges { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
SQL关系
userPrivaleges.UserId不可为null,因此(userPrivalegs.UserId!=null)将始终为true。数据库中的类型可以为null,但代码中的类型不可为null
UserId
的类型为int
,它永远不能为null
。(因此出现了错误。)因此,假设在某个类的某个地方,您有如下内容:
public int UserId { get; set; }
要使类型可为null,您需要以下内容:
public int? UserId { get; set; }
或者,如果您愿意,可以这样做:
public Nullable<int> UserId { get; set; }
public可空用户id{get;set;}
由于您正在更改属性的类型,因此这可能会对此处未显示的有关如何使用该属性的其他代码产生影响。但这将允许该属性携带null值。是否应该检查userPrivlages==null而不是userPrivlages.UserId==null?另外,第二个from和join是否应该使用相同的名称
尝试更正这些问题。您应该使您的属性为空。以后,请确保将相关代码作为文本包含在问题中。图像对移动设备不友好,也不允许用户将代码复制粘贴到答案中。任何想向您提供基于代码的答案的人都必须重新键入您的代码。我无法确定该类是自动生成的。我包含了代码。您是否应该检查
userPrivlages==null
而不是userPrivlages.UserId==null
?另外,第二个from和join是否应该使用相同的名称?UserId在类from database中!:(@evillipper:那么要么该值不能为null,要么你正在使用一个坏代码生成工具。我尝试使用userid==null,结果返回TRUE!我认为问题在于你如何尝试执行查询。我看不到你的数据模型,但用户和用户权限集合之间是否存在关系?请查看接受的answer、 我犯了一个错误,因为我检查了字段,而不是所有的对象(在sql标准中,左连接在linq返回对象中返回空字段)。如果我检查了对象为空,警告将消失。我添加了脚本sql和rel schema have fun!:DYou是对的,但我总是为所有表设置id(我知道这是错误的,但它可以返回非常有用)。我首先使用实体框架数据库和mvc 5。我必须开发一个具有复选框特权的UI->isSelected是复选框的,如果没有,行用户没有特权。我认为这样更有效,但是的,我应该从profile对象导航(但我需要所有权限来显示所有可检查的权限)。我将更改名称,但它也使用相同的名称!所有对象(行)都为空,现在警告消失。再次感谢。
public int? UserId { get; set; }
public Nullable<int> UserId { get; set; }