如何将 LINQ to XML 子查询添加到 LINQ to Entities 查询?
How can I add a LINQ to XML subquery to a LINQ to Entities query?
我在 XML 类型的数据库列中有一个 XML 结构,看起来像这样:
<Translation>
<Language ID="1">
<Title>Some title</Title>
<Abbrevation>some abbrevation</Abbrevation>
<Source>https://www.somesource.com</Source>
</Language>
<Language ID="2">
<Title>some more titles</Title>
<Abbrevation>some more abbrevation</Abbrevation>
<Source>https://www.somemoresource.com</Source>
</Sprache>
</Translation>
现在我需要将此 XML 的元素放入 LINQ to Entities 查询中。
到目前为止我尝试了什么:
return from x in _context.Test
where((displayAll == false && (x.Aufhebung == null || x.Aufhebung > DateTime.Now)) || (displayAll))
select new TestViewModel()
{
ID = x.ID,
Prop = x.Prop,
Number = x.Number ?? "",
Title = XElement.Parse(x.Translation).Descendants("Language").Where(f => f.FirstAttribute.Value == "1").Descendants("Title").Single().Value,
};
}
模型上的属性是:
public string Translation{ get; set; }
但我总是收到错误消息:
LINQ to Entities does not recognize the method [System.Xml.Linq.XElement], System.Xml.Linq.XName, and this method cannot be translated into a store expression.
有没有办法在 LINQ to Entities 中获取 LINQ to XML 子查询?
虽然 "database element" 未具体化,但 Linq 方法中的每个表达式都将在可能的情况下转换为 SQL 表达式...但是此操作:
Title = XElement.Parse(x.Translation).Descendants("Language").Where(f => f.FirstAttribute.Value == "1").Descendants("Title").Single().Value
如错误消息文本所述,无法在存储表达式中进行翻译,这是因为存在 XElement 及其方法。
要在 Linq 方法中执行这一行,您必须实现由
编辑的 IQueryable return
context.Test.where((displayAll == false && (x.Aufhebung == null || x.Aufhebung > DateTime.Now)) || (displayAll))
然后继续select。在这种情况下,要具体化此 IQueryable,在 Non-SQL 类似语法中,Linq 提供方法 .ToList(),在这种情况下将 return 一个 List,在应用程序内存中具体化并准备好与每个应用程序表达式一起使用。
我在 XML 类型的数据库列中有一个 XML 结构,看起来像这样:
<Translation>
<Language ID="1">
<Title>Some title</Title>
<Abbrevation>some abbrevation</Abbrevation>
<Source>https://www.somesource.com</Source>
</Language>
<Language ID="2">
<Title>some more titles</Title>
<Abbrevation>some more abbrevation</Abbrevation>
<Source>https://www.somemoresource.com</Source>
</Sprache>
</Translation>
现在我需要将此 XML 的元素放入 LINQ to Entities 查询中。 到目前为止我尝试了什么:
return from x in _context.Test
where((displayAll == false && (x.Aufhebung == null || x.Aufhebung > DateTime.Now)) || (displayAll))
select new TestViewModel()
{
ID = x.ID,
Prop = x.Prop,
Number = x.Number ?? "",
Title = XElement.Parse(x.Translation).Descendants("Language").Where(f => f.FirstAttribute.Value == "1").Descendants("Title").Single().Value,
};
}
模型上的属性是:
public string Translation{ get; set; }
但我总是收到错误消息:
LINQ to Entities does not recognize the method [System.Xml.Linq.XElement], System.Xml.Linq.XName, and this method cannot be translated into a store expression.
有没有办法在 LINQ to Entities 中获取 LINQ to XML 子查询?
虽然 "database element" 未具体化,但 Linq 方法中的每个表达式都将在可能的情况下转换为 SQL 表达式...但是此操作:
Title = XElement.Parse(x.Translation).Descendants("Language").Where(f => f.FirstAttribute.Value == "1").Descendants("Title").Single().Value
如错误消息文本所述,无法在存储表达式中进行翻译,这是因为存在 XElement 及其方法。
要在 Linq 方法中执行这一行,您必须实现由
编辑的 IQueryable returncontext.Test.where((displayAll == false && (x.Aufhebung == null || x.Aufhebung > DateTime.Now)) || (displayAll))
然后继续select。在这种情况下,要具体化此 IQueryable,在 Non-SQL 类似语法中,Linq 提供方法 .ToList(),在这种情况下将 return 一个 List