C# 动态Linq-连接具有1对多关系的表
我使用动态Linq作为应用程序内报告工具的后端,遇到了一个问题,我无法绕过必须访问具有1:m关系的表的位置 我的简化数据结构如下: 如果我在标准Linq中对此进行查询,我会将查询编写为: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"
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
枚举的内容。