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-连接具有1对多关系的表_C#_Linq_Join_Dynamic Linq - Fatal编程技术网

C# 动态Linq-连接具有1对多关系的表

C# 动态Linq-连接具有1对多关系的表,c#,linq,join,dynamic-linq,C#,Linq,Join,Dynamic Linq,我使用动态Linq作为应用程序内报告工具的后端,遇到了一个问题,我无法绕过必须访问具有1:m关系的表的位置 我的简化数据结构如下: 如果我在标准Linq中对此进行查询,我会将查询编写为: from a in context.Table_A select new { a.RefNo, val = from b in a.Table_B where (b.A_ID == a.ID) where (b.code == "A0001"

我使用动态Linq作为应用程序内报告工具的后端,遇到了一个问题,我无法绕过必须访问具有1:m关系的表的位置

我的简化数据结构如下:

如果我在标准Linq中对此进行查询,我会将查询编写为:

from a in context.Table_A
select new 
{
    a.RefNo,
    val = from b in a.Table_B
          where (b.A_ID == a.ID)
          where (b.code == "A0001"
          select(b.Value).FirstOrDefault()
}
这项工作没有任何问题。但是,当我尝试使用动态Linq进行查询时,我无法使连接正常工作

从下面的代码可以看出我的意思,但显然我不能在查询中使用“a.”和“a.Table_B”引用。在这种情况下,我必须做什么才能访问表_B

string select =  "new (Ref_No, 
                       val = from b in a.Table_B
                       where (b.A_ID == a.ID)
                       where (b.code == \"A0001\"
                       select(b.Value).FirstOrDefault()";

var results = context.Table_A.Select(select);
编辑1:

为了回答@Hogan的评论,我为什么不使用join:报表系统是动态的,select语句可能会也可能不会连接到表_B(或者确实会多次连接到表_B),因此连接必须是可选的。我的另一个问题是,与Select方法不同,在Select方法中,我可以将字符串作为参数传递(这使我可以很容易地使其成为动态的),不能以这种方式调用Join()方法。我发现的最接近的东西是A,一些我可能要考虑使用的东西,但是我有一种感觉,这对于动态选择()来说很麻烦。 编辑2:

根据霍根的建议,我得出了以下结论:

delegate string searchTableA(Table_A a);

public void Search()
{
   ....

   searchTableA sel = (a) =>
   {
      return (from b in context.Table_B
      where (b.A_ID == a.ID)
      select (b.Value)).FirstOrDefault();
   };

   var res = context.Table_A.Select(sel);
}

这就产生了错误:
“System.Data.Entity.DbSet”不包含“Select”的定义和“System.Linq.Dynamic.DynamicQueryable.Select(System.Linq.IQueryable,string,params object[])”的最佳扩展方法重载“System.Linq.DynamicQueryable.Select(System.Linq.IQueryable,string,params object[])”有一些无效参数

很难给出准确的代码,因为我不知道元素的类型,但是,使用代理可以很好地实现类似的功能

delegate string searchTableA(elementType a);

searchTableA sel = (a) => 
  {
     return from b in a.Table_B
                   where (b.A_ID == a.ID)
                   where (b.code == "A0001")
                   select(b.Value).FirstOrDefault();
  };

var results = context.Table_A.Select(sel); 

为什么不使用linq的连接功能?@Hogan-请参见编辑。@GrandMasterFlush您的[question][1][1]:没有,对不起。这个项目在一段时间后被终止了,所以我从来没有继续过。@GrandMasterFlush-除非我能看到更多的代码,否则我帮不了忙。你发布的一行没有任何意义。请修改该问题,使其包含新的问题源,或创建一个更详细的新问题。感谢您的关注,我已使用当前代码更新了该问题。@GrandMasterFlush-我明白了,您不希望
searchTableA(Table_a)
获取表格,而是希望它获取
Table_a
的元素。。。一行或任何
表a
枚举的内容。