0
var query = from t1 in Table1
            join t2 in Table2
                on new { t1.Id }
                equals new { t2.Id}
            select new
            {
                t1.Id,
                t1.FirstName,
                t1.MiddleName,//allows null values in the database
                t1.LastName,
                t1.phone //allows null values in the database

            };
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL"
{
}

有没有一种方法可以在我的 LINQ 查询中获取所有行,包括 middleName 和 Phone 的空值?

4

4 回答 4

1

如果您使用的是 linq-to-datasets,则必须手动将可为空的列转换为 null,因为它们的DataRow值为DBNull.Value. 在强类型 DataSet 中,您应该能够执行以下操作:

var query = from t1 in Table1
        join t2 in Table2
            on new { t1.Id }
            equals new { t2.Id}
        select new
        {
            t1.Id,
            t1.FirstName,
            t1.IsMiddleNameNull ? null : t1.MiddleName,
            t1.LastName,
            t1.IsPhoneNull ? null : t1.Phone 
        };

在无类型的 DataSet 中,您将调用类似t1.IsNull("MiddleName") ? null : t1["MiddleName"]

于 2011-05-16T15:19:51.753 回答
0

听起来元数据与您的数据库架构不同步。似乎在为您的模式 MiddleName 生成类时是不可为空的,但现在是。如果是这种情况,如果您使用的是实体框架,则需要刷新您的 EDMX,或者如果您使用的是 LINQ to SQL,则需要刷新您的类。

于 2011-05-16T15:14:39.987 回答
0

问题是一个新的匿名对象的属性是动态定义的,其类型是从值中推断出来的。

在这样的一行

MiddleName = t1.MiddleName,//allows null values in the database 

创建了一个名为 MiddleName 的新属性,其类型为 t1.MiddleName 的类型。但是如果 t1.MiddleName 为空,那么类型是什么???Null 没有类型。

为了防止任何歧义,简单地说

MiddleName = (string)t1.MiddleName,

让编译器知道它是一个字符串,即使没有提供。

于 2011-05-18T12:47:54.470 回答
0

你能试一试吗

var query = from t1 in Table1
            join t2 in Table2
                on new { t1.Id }
                equals new { t2.Id}
            select new
            {
                Id = t1.Id,
                FirstName = t1.FirstName,
                MiddleName = t1.MiddleName,//allows null values in the database
                LastName = t1.LastName,
                Phone = t1.phone //allows null values in the database

            };
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL"
{
}
于 2011-05-16T16:00:53.527 回答