首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamicQuery:如何使用带有参数的linq查询来选择列

DynamicQuery:如何使用带有参数的linq查询来选择列
EN

Stack Overflow用户
提问于 2010-03-30 13:05:47
回答 2查看 2K关注 0票数 1

我们希望建立一个与我们一起工作的所有组织的目录。他们是难以置信的多样化(政府,大使馆,私人公司和组织依赖于他们)。因此,我决定创建两个表。表1将平等对待所有组织,即收集所有基本信息(姓名、地址、电话号码等)。表2将在所有组织之间建立层次结构。例如,成人文盲方案依赖于国家社会保障研究所,该研究所依赖于劳工部。

在层次结构表中,每个列表示一个级别。因此,就上述例子而言,(一)劳动部- Level1(column1),(二)国家社会保障研究所- Level2(column2),(三)文盲成人方案- Level3(column3)。

要将组织附加到层次结构,用户需要逐级(即逐列)。因此,至少有3种情况:

如果一个组织存在适当的层次结构(例如,:美国大使馆),则可以添加该组织(例如,level2: USAID)。->美国大使馆/美国国际开发署,等等。如果缺少一个或多个级别,那么

  • 如何?-那么它们需要添加
  • ,如果需要修改层次结构怎么办?--并不是所有的东西都需要修改。

我别无选择,只能按级别(即一列一列)工作。当用户需要导航层次结构以找到正确的层次来附加一个组织时,将所有的级别都以一种形式存在是没有意义的。

比方说,我的存储库中有这些查询(只是您有了这个想法)。

Query1

代码语言:javascript
复制
var orgHierarchy = (from orgH in db.Hierarchy
                   select orgH.Level1).FirstOrDefault;

Query2

代码语言:javascript
复制
var orgHierarchy = (from orgH in db.Hierarchy
                   select orgH.Level2).FirstOrDefault;

Query3、Query4等。

除了查询的属性(level1、level2、level3等)外,上述查询都是相同的。

问:是否有一种通用的方式将上述查询写在一起?这样,用户就可以逐级跟踪层次结构,以附加组织。

换句话说,由于事先不知道要查询哪一列,我仍然需要能够根据某些条件进行查询。例如,一个组织X依赖于Y。知道Y在第3层的某个位置,我将进入第4层,将X链接到Y。

我需要选择一个列(不是手动的),它只包含一个接受参数的查询。

=======================编辑

正如我刚才对@Mark说的那样,我想要的只是能够查询一个列,而事先不知道哪一列。看看这个:

这个怎么样?

代码语言:javascript
复制
Public Hierarchy GetHierarchy(string name)
{
  var myHierarchy = from hierarc in db.Hierarchy
                    where (hierarc.Level1 == name)
                    select hierarc;
  retuen myHierarchy;  
}

上面,查询取决于名称,它是一个变量。它可能是规划部,大使馆,当地电话等。

我可以写同样的查询,但是这次我没有在DB中查找大量的值,而是强制我的查询来选择一个特定的列。

代码语言:javascript
复制
var myVar = from orgH in db.Hierarchy
            where (orgH.Level1 == "Government")
            select orgH.where(level == myVariable);
return myVar;

我并不假装select orgH.where(level == myVariable)甚至接近于有效。但这正是我想要的:能够根据变量选择一个列(也就是说,这个值事先不知道,比如name)。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-30 15:39:12

使用DynamicQueryable怎么样?

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

票数 1
EN

Stack Overflow用户

发布于 2010-03-30 13:11:53

您的数据库没有标准化,因此您应该首先将继承表更改为,例如:

代码语言:javascript
复制
OrganizationId Parent
1              NULL
2              1
3              1
4              3

要查询这一点,您可能需要使用递归查询。使用LINQ很难(但并非不可能),因此您可能更喜欢使用递归CTE创建参数化存储过程并将查询放在那里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2545346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档