C# C、 SQL Server,Linq to SQL-在查询结果(类列表)中找不到项

C# C、 SQL Server,Linq to SQL-在查询结果(类列表)中找不到项,c#,sql-server,list,class,linq-to-sql,C#,Sql Server,List,Class,Linq To Sql,我试图列出从数据库收集的类对象。我能够使用LINQtoSQL类,以便使用Linq生成类对象列表 我能够在列表中查找内容,但是当我查找不在列表中的内容时,它会失败空错误异常。我想测试null,或者弄清楚我的项目是否不在列表中,但是 q.Find(x => (x.fid1 == "abc123")).fid1 = "9454a3" == null 生成空错误异常。这是我第一次使用LINQtoSQL类,所以任何关于我如何使用它的输入都是受欢迎的 class TestClass { p

我试图列出从数据库收集的类对象。我能够使用LINQtoSQL类,以便使用Linq生成类对象列表

我能够在列表中查找内容,但是当我查找不在列表中的内容时,它会失败空错误异常。我想测试null,或者弄清楚我的项目是否不在列表中,但是

q.Find(x => (x.fid1 == "abc123")).fid1 = "9454a3" == null 
生成空错误异常。这是我第一次使用LINQtoSQL类,所以任何关于我如何使用它的输入都是受欢迎的

class TestClass
{
    public class FIDClass
    {
        public System.String fid1 { get; set; }
        public System.String fid2 { get; set; }
        public System.Int32 fid3 { get; set; }
    }

    static void Main()
    { 
        //  linq to SQL class
        DataClasses1DataContext db = new DataClasses1DataContext();

        var q = (from dbfile in db.GetTable<DataTable>()
                 where dbfilefid3  == 15
                 select new FIDClass
                 {
                     fid1 = dbfile.fid1,
                     fid2 = dbfile.fid2,
                     fid3 = (int) dbfile.fid3
                 }).ToList<FIDClass>();

        // if it's found, the following works fine
        // if it's not found, I get a null error exception on the if stmt

        if (q.Find(x => (x.fid1 == "abc123")).fid1 == "abc123" )    
            { MessageBox.Show("Found");
            }
    }
}

如果您有任何帮助、想法和反馈,我们将不胜感激。

您应该检查空值,如下所示:

if (q.Find(x => x.fid1 == "abc123") != null ) 
        { MessageBox.Show("Found");
        }
else
        { MessageBox.Show("NOT Found");
        }

如果这解决了您的问题,请将其标记为已回答。

您应该检查空值,如下所示:

if (q.Find(x => x.fid1 == "abc123") != null ) 
        { MessageBox.Show("Found");
        }
else
        { MessageBox.Show("NOT Found");
        }

如果这解决了您的问题,请将其标记为已回答。

首先,它是2017年,不要使用Linq to SQL。它已经贬值了一段时间。 其次,您的查询根本没有优化。您正在使用ToList方法从服务器中提取所有数据,这是不好的,您希望使用iQuery来执行查询操作。
您遇到的问题是,如果找不到对象,find方法将返回null。因此,如果您只想检查是否存在满足条件Anyx=>x.fid1==abc123

的对象,请使用Any方法。首先,不要使用Linq to SQL,因为它已经贬值了一段时间。 其次,您的查询根本没有优化。您正在使用ToList方法从服务器中提取所有数据,这是不好的,您希望使用iQuery来执行查询操作。
您遇到的问题是,如果找不到对象,find方法将返回null。因此,如果您只想检查我的iPad上是否有满足条件Anyx=>x.fid1==abc123

的对象,请使用Any方法,因此无法测试此结果。 根据.net版本的不同,您可以尝试空合并

    if (q.Any(x => (x?.fid1 == "abc123")) )    
否则,


如果q.Anyx=>x=null&&x.fid1==abc123

在我的iPad上,所以无法测试。 根据.net版本的不同,您可以尝试空合并

    if (q.Any(x => (x?.fid1 == "abc123")) )    
否则,


如果q.Anyx=>x=null&&x.fid1==abc123

谢谢你,Rajnieesh-抓得好。这是在简化我的代码时发生的,所以它并没有像我最初使用==,那样解决我的问题。谢谢,Rajnieesh-很好。这是在简化我的代码时发生的,因此它不会像我最初使用==。谢谢那样解决我的问题。因此,只需执行常规查询,并使用读取器填充类列表,或者您可以给出一个使用iQueriable的简单示例。我现在就用谷歌搜索。你是说我不应该使用LINQtoSQL类吗?使用它是LINQtoSQL的现代版本。对于IQueriable,这里有一个谢谢你的菲利普!我有点害怕实体框架,因为它似乎增加了很多开销。我会看看你的链接。别担心,它和Linq到SQL差不多。有了VS,就可以快速入门,有一些模板可以构建入门所需的大部分内容。谢谢。因此,只需执行常规查询,并使用读取器填充类列表,或者您可以给出一个使用iQueriable的简单示例。我现在就用谷歌搜索。你是说我不应该使用LINQtoSQL类吗?使用它是LINQtoSQL的现代版本。对于IQueriable,这里有一个谢谢你的菲利普!我有点害怕实体框架,因为它似乎增加了很多开销。我会看看你的链接。别担心,它和Linq到SQL差不多。有了VS,就可以快速入门,有一些模板可以构建您入门所需的大部分内容。我正在考虑实体框架。已经很晚了,昨天晚上,我认为您不需要空检查。任何一个都应该足够了,这很有效。我正在考虑实体框架。已经很晚了,昨天晚上,我认为您不需要空检查。任何一个都应该足够了。