C# 从表1中选择行,并从表2中选择所有子对象
我想从表“省通知程序”中提取数据,并从表“省通知程序数据”中提取所有相应的项。表“省通知程序”有一个标识它的guid(PK),表“省通知程序数据”有一个名为BelongStopProvinceID的列,它是“省通知程序”表guid的外键 我试过这样的方法:C# 从表1中选择行,并从表2中选择所有子对象,c#,linq,join,C#,Linq,Join,我想从表“省通知程序”中提取数据,并从表“省通知程序数据”中提取所有相应的项。表“省通知程序”有一个标识它的guid(PK),表“省通知程序数据”有一个名为BelongStopProvinceID的列,它是“省通知程序”表guid的外键 我试过这样的方法: var records = from data in ctx.Province_Notifiers where DateTime.Now >= data.SendTime && data.Se
var records = from data in ctx.Province_Notifiers
where DateTime.Now >= data.SendTime && data.Sent == false
join data2 in ctx.Province_Notifier_Datas on data.Province_ID equals data2.BelongsToProvince_ID
select new Province_Notifier
{
Email = data.Email,
Province_ID = data.Province_ID,
ProvinceName = data.ProvinceName,
Sent = data.Sent,
UserName = data.UserName,
User_ID = data.User_ID,
Province_Notifier_Datas = (new List<Province_Notifier_Data>().AddRange(data2))
};
这样可以将数据正确插入两个表中
编辑:
将引发以下错误消息:
无法从“省\通知程序\数据”转换为“System.Collections.Generic.IEnumerable”
如果我在Visual Studio中查看,变量“Province\u Notifier\u Datas”的类型是System.Data.Linq.EntitySet
与“System.Collections.Generic.List.AddRange(System.Collections.Generic.IEnumerable)”匹配的最佳重载方法具有一些无效参数
编辑:
var records = from data in ctx.Province_Notifiers
where DateTime.Now >= data.SendTime && data.Sent == false
join data2 in ctx.Province_Notifier_Datas on data.Province_ID equals data2.BelongsToProvince_ID
into data2list
select new Province_Notifier
{
Email = data.Email,
Province_ID = data.Province_ID,
ProvinceName = data.ProvinceName,
Sent = data.Sent,
UserName = data.UserName,
User_ID = data.User_ID,
Province_Notifier_Datas = new EntitySet<Province_Notifier_Data>().AddRange(data2List)
};
var records=来自ctx.Province\u通知程序中的数据
其中DateTime.Now>=data.SendTime&&data.Sent==false
在数据上的ctx.Province\u Notifier\u数据中加入data2.Province\u ID等于data2.BelongsToProvince\u ID
进入data2list
选择新省\通知程序
{
Email=data.Email,
省\号=数据。省\号,
ProvinceName=data.ProvinceName,
已发送=数据。已发送,
UserName=data.UserName,
User\u ID=data.User\u ID,
省\通知程序\数据=新EntitySet().AddRange(data2List)
};
错误3当前上下文中不存在名称“data2List”。
data2
表示类型为省\通知者\数据的单个对象,而不是枚举(因此为异常)。尝试在查询中插入到子句:
var records = from data in ctx.Province_Notifiers
where DateTime.Now >= data.SendTime && data.Sent == false
join data2 in ctx.Province_Notifier_Datas
on data.Province_ID equals data2.BelongsToProvince_ID
into data2List
select new Province_Notifier
{
Email = data.Email,
Province_ID = data.Province_ID,
ProvinceName = data.ProvinceName,
Sent = data.Sent,
UserName = data.UserName,
User_ID = data.User_ID,
Province_Notifier_Datas = data2List
};
如果Province\u Notifier\u data
的类型为EntitySet
,您可以尝试以下操作:定义扩展方法(idea from):
当我尝试这样做时,会出现以下错误:错误3无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Data.Linq.EntitySet”。存在显式转换(是否缺少强制转换?@Patrick:EntitySet类型的省\通知者\数据
?然后试试我编辑的代码。我添加了它,但现在它找不到data2List??在我上面的帖子中,底部似乎是一个打字错误:data2list
vs.data2list
是的,我有时是瞎的。我现在明白了:错误1无法将类型“void”隐式转换为“System.Data.Linq.EntitySet”
var records = from data in ctx.Province_Notifiers
where DateTime.Now >= data.SendTime && data.Sent == false
join data2 in ctx.Province_Notifier_Datas on data.Province_ID equals data2.BelongsToProvince_ID
into data2list
select new Province_Notifier
{
Email = data.Email,
Province_ID = data.Province_ID,
ProvinceName = data.ProvinceName,
Sent = data.Sent,
UserName = data.UserName,
User_ID = data.User_ID,
Province_Notifier_Datas = new EntitySet<Province_Notifier_Data>().AddRange(data2List)
};
var records = from data in ctx.Province_Notifiers
where DateTime.Now >= data.SendTime && data.Sent == false
join data2 in ctx.Province_Notifier_Datas
on data.Province_ID equals data2.BelongsToProvince_ID
into data2List
select new Province_Notifier
{
Email = data.Email,
Province_ID = data.Province_ID,
ProvinceName = data.ProvinceName,
Sent = data.Sent,
UserName = data.UserName,
User_ID = data.User_ID,
Province_Notifier_Datas = data2List
};
public static class Extensions
{
public static EntitySet<T> ToEntitySet<T>(this IEnumerable<T> source)
where T : class
{
var entitySet = new EntitySet<T>();
entitySet.AddRange(source);
return entitySet;
}
}
Province_Notifier_Datas = data2List.ToEntitySet()