如何将 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,在应用程序内存中具体化并准备好与每个应用程序表达式一起使用。