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

本文关键字:LLBLGen Linq 查询 创建 字符串 动态 | 更新日期: 2023-09-27 17:47:46

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

通常,通过对DLL使用调用(我们将其指定给框架(而不是引用)),我们可以创建代码来检索数据。但现在我们需要林克来做这件事。我们如何创建这样的查询:

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

仅来自字符串。我们会有一个名为"customer"的字符串,所以我们知道我们必须从customer中检索。然后我们会有一个字符串[],其中包含我们想要检索的字段名。正如您所看到的,这些列可能包括复杂的类型(相关字段)。

任何建议,尤其是与LLBLGen结合使用,都将是非常棒的!

谢谢,Gab

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

我不确定这是否正是你想要的,但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#中完成