Linq to sql DynamicQuery:如何使用接受参数的linq查询选择列
我们想建立一个与我们合作的所有组织的目录。它们的多样性令人难以置信(政府、大使馆、私人公司和依赖它们的组织)。因此,我决定创建两个表表1将平等对待所有组织,即收集所有基本信息(姓名、地址、电话号码等)表2将建立所有组织之间的层次结构。例如,文盲成人计划依赖于国家社会保障研究所,该研究所依赖于劳动部 在层次结构表中,每列代表一个级别。因此,在上面的例子中,(i)劳动部一级(第1栏),(ii)国家社会保障研究所二级(第2栏),(iii)成人文盲计划三级(第3栏) 要将组织附加到层次结构,用户需要逐级(即逐列)执行操作。因此,至少有3种情况:Linq to sql DynamicQuery:如何使用接受参数的linq查询选择列,linq-to-sql,linq-to-entities,Linq To Sql,Linq To Entities,我们想建立一个与我们合作的所有组织的目录。它们的多样性令人难以置信(政府、大使馆、私人公司和依赖它们的组织)。因此,我决定创建两个表表1将平等对待所有组织,即收集所有基本信息(姓名、地址、电话号码等)表2将建立所有组织之间的层次结构。例如,文盲成人计划依赖于国家社会保障研究所,该研究所依赖于劳动部 在层次结构表中,每列代表一个级别。因此,在上面的例子中,(i)劳动部一级(第1栏),(ii)国家社会保障研究所二级(第2栏),(iii)成人文盲计划三级(第3栏) 要将组织附加到层次结构,用户需要逐级
- 如果某个组织存在适当的层次结构(例如,级别1:美国大使馆),则可以添加该组织(例如,级别2:美国国际开发署)。->美国大使馆/美国国际开发署,依此类推李>
- 如果缺少一个或多个级别,情况如何然后需要添加它们
- 如果需要修改层次结构如何?--并非每件事都需要修改
var orgHierarchy = (from orgH in db.Hierarchy
select orgH.Level1).FirstOrDefault;
问题2
var orgHierarchy = (from orgH in db.Hierarchy
select orgH.Level2).FirstOrDefault;
问题3、问题4等
除了查询的属性(level1、level2、level3等)之外,上述查询是相同的
问题:是否有一种通用的方法将上述查询写在一个数据库中?因此,用户可以逐级跟踪层次结构以附加组织
换句话说,由于事先不知道要查询哪个列,我仍然需要能够根据某些条件进行查询。例如,一个组织X依赖于Y。知道Y在第三层的某个地方,我将转到第四层,将X链接到Y
我需要选择(不是手动)一个列,该列只有一个接受参数的查询
=======================
编辑
正如我刚才对@markbyers所说的,我只想能够查询一个列,而不必事先知道是哪个列。看看这个:
这个怎么样
Public Hierarchy GetHierarchy(string name)
{
var myHierarchy = from hierarc in db.Hierarchy
where (hierarc.Level1 == name)
select hierarc;
retuen myHierarchy;
}
上面,查询取决于作为变量的名称。它可以是计划部、大使馆、当地电话等
我是否可以编写相同的查询,但这次我没有在数据库中查找太多的值,而是强制执行查询来选择特定的列
var myVar = from orgH in db.Hierarchy
where (orgH.Level1 == "Government")
select orgH.where(level == myVariable);
return myVar;
我不会假装select orgH.where(level==myVariable)甚至接近有效。但这正是我想要的:能够根据变量选择一列(即,与name一样,该值事先不知道)
感谢您的帮助您的数据库未规范化,因此您应该首先将继承人权限表更改为,例如:
OrganizationId Parent
1 NULL
2 1
3 1
4 3
要查询这个,您可能需要使用递归查询。使用LINQ很困难(但并非不可能),因此您可能更喜欢使用递归CTE创建参数化存储过程,并将查询放在那里。使用DynamicQueryable如何
@Mark Byers——我所需要的只是能够查询一个列,而不知道该列是哪一列。例如,我可以选择选择第一列--我将编写select orgH.Level1,第二列--我将编写select orgH.Level2,依此类推。有一个表达式,比如select orgH.where(columnName==variable),怎么样?变量可能是level1、level2等等@SteadyEddi-我刚刚读了ScootGu的帖子。看起来像是我想要的。我会尝试利用它。所以,我可能需要你们提供一些想法。@SteadyEddi--谢谢你们的链接。我试过了,这正是我想要的。在我添加Select语句之前,一切都很正常。然而(不幸的是),这就是我问题的目的。例如,选择(“new(Name=Director)”)。当我尝试在Foreach(电影中的var monie)循环中检索该值时,不仅在“movie”后键入一个点后无法获得intellisense,而且,如果键入的是movie.Director或movie.Name,则会出现一个错误——对象不包含Director(Name)的定义。我可以利用select语句吗?我认为intellisense的可能性不大,因为对象是基于字符串动态构建的。您必须使用反射(GetProperty)来获取您创建的匿名对象的属性。您可以发布一个示例或给我指出一个示例吗?我最近学习了如何使用getProperty,但我需要将它与dynamicQuery结合起来。