sql server - Linq c#在导航属性上加入空值
本文关键字:属性 空值 导航 server Linq sql | 更新日期: 2023-09-27 18:01:23
我有这些类:
class Group
{
public int GroupID { get; set; }
public string PlaceOfMeeting { get; set; }
public int? PublisherID { get; set; }
public IEnumerable<Publisher> Publishers { get; set; }
public Publisher Publisher { get; set; }
}
class Publisher
{
public int PublisherID { get; set; }
public int GroupID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public int Gender { get; set; }
public string Nationality{ get; set; }
}
和我想选择使用Linq数据集像这样:
查询SELECT TOP 1000 [Groups].[GroupID],
[Groups].[PlaceOfMeeting],
[Groups].[PublisherID],
[publisher].[MiddleName],
[publisher].[Gender],
[publisher].[Nationality]
FROM [dbo].[Groups]
left outer join Publisher
on Publisher.PublisherID = Groups.PublisherID
GroupID PlaceOfMeeting PublisherID midlename性别国籍
1安哥拉1科霍1加纳
2 Estate 2 Joe 1 ghana
3 Banchem 3 Kofi 1 ghana
4 Kwabedu NULL NULL NULL NULL
我想使用Linq来处理数据集或对象
我尝试过这样的东西,但我得到ArgumentNullException @第18行,消息是值不能为空因为传递给Publisher的一些记录值是空的
List<ValueObjects.Group> GetAllGroups() {
DataTable Groups = HelperClass.GetTable("Groups", connectionString);
DataTable Publishers = HelperClass.GetTable("Publisher", connectionString);
DataTable Contacts = HelperClass.GetTable("Contacts", connectionString);
var groups = Groups.AsEnumerable();
var publishers = Publishers.AsEnumerable();
var group = from g in groups
join p in Publishers.AsEnumerable() on g.Field<int?>("PublisherID") equals p.Field<int?>("PublisherID") into g_p
from pub in g_p.DefaultIfEmpty()
select new Group()
{
GroupID = g.Field<int>("GroupID"),
PlaceOfMeeting = g.Field<string>("PlaceOfMeeting"),
Publisher = g.Field<int?>("PublisherID"),
Publisher = new Publisher()
{
PublisherID = pub.Field<int>("PublisherID"),
GroupID = pub.Field<int>("GroupID"),
FirstName = pub.Field<string>("FirstName"),
LastName = pub.Field<string>("LastName"),
MiddleName = pub.Field<string>("MiddleName"),
Gender = (Gender)pub.Field<int>("Gender"),
Nationality = pub.Field<string>("Nationality"),
},
Publishers = from p in publishers.DefaultIfEmpty()
where p.Field<int>("GroupID") == g.Field<int>("GroupID")
join c in Contacts.AsEnumerable().DefaultIfEmpty() on p.Field<int>("PublisherID") equals c.Field<int>("PublisherID")
select new Publisher
{
PublisherID = p.Field<int>("PublisherID"),
GroupID = p.Field<int>("GroupID"),
FirstName = p.Field<string>("FirstName"),
LastName = p.Field<string>("LastName"),
MiddleName = p.Field<string>("MiddleName"),
Gender = (Gender)p.Field<int>("Gender"),
Nationality = p.Field<string>("Nationality"),
Contacts = new Contacts
{
Phone1 = c.Field<string>("Phone1"),
Phone2 = c.Field<string>("Phone2")
},
}
};
return group.ToList();
}
这意味着有时publisher
是null
,因为"外连接",即join ... into
(GroupJoin
)。
Publisher = new Publisher()
{
...
}
…由…
Publisher = pub == null ? default(Publisher) : new Publisher()
{
PublisherID = pub.Field<int>("PublisherID"),
GroupID = pub.Field<int>("GroupID"),
FirstName = pub.Field<string>("FirstName"),
LastName = pub.Field<string>("LastName"),
MiddleName = pub.Field<string>("MiddleName"),
Gender = (Gender)pub.Field<int>("Gender"),
Nationality = pub.Field<string>("Nationality"),
},