Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ查询联接表_C#_Linq_Entity Framework_Code First - Fatal编程技术网

C# 使用LINQ查询联接表

C# 使用LINQ查询联接表,c#,linq,entity-framework,code-first,C#,Linq,Entity Framework,Code First,好吧,这很可能是个愚蠢的问题。我首先使用实体框架代码。我有两个类,User和Event,它们具有多对多关系。当EF生成我的数据库表时,它会创建一个联接表,我称之为Users\u Events。这个表有两列,User\u ID和Event\u ID。到目前为止一切正常 我想从数据库中提取一个事件并将其序列化为JSON。这也可以很好地工作,除了我不能拉一个事件的用户,因为这将创建一个循环引用。这里我要做的是查询我的联接表,并获取所有用户ID,这些用户ID的关联事件ID等于我正在序列化的事件ID 我怎

好吧,这很可能是个愚蠢的问题。我首先使用实体框架代码。我有两个类,User和Event,它们具有多对多关系。当EF生成我的数据库表时,它会创建一个联接表,我称之为Users\u Events。这个表有两列,User\u ID和Event\u ID。到目前为止一切正常

我想从数据库中提取一个事件并将其序列化为JSON。这也可以很好地工作,除了我不能拉一个事件的用户,因为这将创建一个循环引用。这里我要做的是查询我的联接表,并获取所有用户ID,这些用户ID的关联事件ID等于我正在序列化的事件ID


我怎么能做到这一点呢?

我不知道你到底想在JSON中得到什么,但我怀疑你想选择一个新的匿名类型,并将其序列化。大概是这样的:

from e in myContext.Events
where e.ID = 123
select new { 
    Event = e,
    UserIDs = (from u in e.Users select u.ID)
}

我不知道您希望在JSON中得到什么,但我怀疑您希望选择一个新的匿名类型并将其序列化。大概是这样的:

from e in myContext.Events
where e.ID = 123
select new { 
    Event = e,
    UserIDs = (from u in e.Users select u.ID)
}

我不知道序列化是否能像您预期的那样工作。如果您已经尝试过它,并且发现它序列化了可导航集合,那么我很抱歉,但是由于延迟加载/延迟执行,从LINQ到SQL,我没有经历过这种行为(尽管我意识到EF4.1有很大不同)。在序列化之前,我必须显式指定加载选项来检索相关集合。有关为序列化数据正确格式化相关记录的详细信息,请检查。如果未明确指定,它不会序列化相关对象。我希望事件被序列化。我希望事件的用户被序列化。我不希望事件“用户”事件被序列化(这会创建循环引用)。如果我明确地包括用户(使用.include(“Users”)),那么用户及其所有可导航属性也会被序列化,包括用户的事件。我不知道序列化的工作方式是否与您预期的完全相同。如果您已经尝试过它,并且发现它序列化了可导航集合,那么我很抱歉,但是由于延迟加载/延迟执行,从LINQ到SQL,我没有经历过这种行为(尽管我意识到EF4.1有很大不同)。在序列化之前,我必须显式指定加载选项来检索相关集合。有关为序列化数据正确格式化相关记录的详细信息,请检查。如果未明确指定,它不会序列化相关对象。我希望事件被序列化。我希望事件的用户被序列化。我不希望事件“用户”事件被序列化(这会创建循环引用)。如果我明确地包含用户(使用.include(“Users”)),那么用户及其所有可导航属性也会被序列化,包括用户的事件。我的类相当大,创建匿名类型非常繁琐,代码也很繁重,但可能是这样。我编辑了答案,以提供另一种包装事件的方法。同样,这取决于您希望JSON的外观,但这是我将使用的方法。另一个答案是查看JSON序列化程序的功能。我不确定.NET版本,但Newtonsoft版本有一个。我过去使用过Newtonsoft,但不喜欢它,因为它对我来说序列化太多了(我更喜欢选择序列化的内容)。匿名类型选项非常好,与我所做的类似。我只是在序列化之前循环遍历用户的事件,并将它们设置为空列表,结果成功了。可能代码很差,但我认为在概念上与匿名类型类似。我的类相当大,创建匿名类型非常繁琐,代码也很繁重,但可能。我编辑了我的答案,以提供另一种包装事件的方法。同样,这取决于您希望JSON的外观,但这是我将使用的方法。另一个答案是查看JSON序列化程序的功能。我不确定.NET版本,但Newtonsoft版本有一个。我过去使用过Newtonsoft,但不喜欢它,因为它对我来说序列化太多了(我更喜欢选择序列化的内容)。匿名类型选项非常好,与我所做的类似。我只是在序列化之前循环遍历用户的事件,并将它们设置为空列表,结果成功了。可能代码相当糟糕,但我认为在概念上类似于匿名类型。