gpt4 book ai didi

c# - 使用字符串动态创建 (LLBLGen) Linq 查询

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:47 25 4
gpt4 key购买 nike

我们需要生成在编码(设计时)期间 100% 未知的 LINQ 查询。这是因为逻辑在我们的框架中可用,它与任何数据项目 100% 分离。对于数据,我们使用 LLBLGen 生成的数据访问代码。

通常通过调用我们指定给框架(而非引用)的 DLL,我们可以创建代码来检索数据。但是现在我们需要通过 linq 来完成。我们如何创建如下查询:

var q = from customer in m.Customer
select new
{
customer.Number,
customer.City,
customer.CountryEntity.Name
};

仅来自字符串。我们将有 1 个名为“customer”的字符串,因此我们知道我们必须从 Customer 中检索。然后我们将有一个 string[] 包含我们要检索的字段名。如您所见,这些列可能包含复杂类型(相关字段)。

任何建议,尤其是与 LLBLGen 的结合,都会很棒!

谢谢,唠叨

最佳答案

我不确定这是否正是您要找的东西,但 Scott Gu 在他的博客上有一篇关于使用动态 LINQ 的文章。 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

它可能无法满足您的所有需求,但它可能会为您提供一些帮助。

编辑。我刚刚查看了 Scott Gu 的一些示例代码,发现它可以完成您需要的选择部分。示例(这是 Scotts 代码):

Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
OrderBy("CompanyName"). _
Select("New(CompanyName as Name, Phone)")

如您所见,底部有一个动态选择。

同时为了解决在运行时动态知道要查询哪个对象的问题,你可以这样做:

 Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
Dim i = Myobject.Select("New(customer.Number)")
End Sub

然后你可以在从数据库中读取名字后做一个小的切换,像这样:

Sub PassIt()
Dim name = "customer"
Select Case name
Case "customer"
query(m.Customer)
End Select
End Sub

希望这对您有所帮助。笔记!会有更好的方法来完成最后一部分(passit 方法),但它是在一大早想到它。

抱歉,答案是在 VB 中,我应该在 C# 中完成

关于c# - 使用字符串动态创建 (LLBLGen) Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/248682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com