2016-08-12 70 views
0

我有一个名为“[PcValueSet]”的表。Linq lambda表达式中存在的SQL

表具有字段“[FieldValues]”。

字段值是一个XML字段。

以下是我用来查找结果的表格上的where子句。

WHERE [FieldValues].exist('/_DoorConfig2Page3Table/_DoorConfig2Page3Row/txtDoorDesign') = 1 

在C#中的方法,我需要做类似的事情只有我需要得到“txtDoorDesign”,而不是价值。

我有以下但我不知道如何创建一个类似的功能,“。存在”在sql提供,也不知道如何获取元素的值而不是元素的值。

var temp = Db.PcValueSet.Where(x => x.Company == Session.CompanyID && 
       x.FieldValues.the xml element is not null or empty).ToList(); 

所以我需要找到并返回里面的元素的值和xml列。

+0

我相信这在EF6中仍然不被支持。看到可能的重复:http://stackoverflow.com/a/1104689/1260204。你最好的选择是创建一个存储过程并从EF调用它。 – Igor

回答

0

如果我的理解正确,您将使用SELECT与给定的WHERE来检索您的数据。

正如添加到您的查询:

[FieldValues].value('(/_DoorConfig2Page3Table/_DoorConfig2Page3Row/txtDoorDesign)[1]','varchar(max)') AS txtDoorDesing 

你的结果集将包括txtDoorDesign价值不失.exist()性能。

+0

好吧,这是可以理解的,但我该如何将其转换为C#中的lambda表达式? – lemunk

+0

@lemunk对不起,不知道...什么是列类型* FieldValues *?这可能是'字符串'。我想你必须将其转换为'XDocument'来执行XML特定的查询。我很确定,这可以隐式完成,但必须自己测试。 – Shnugo