2

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

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

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

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

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

谢谢, 加布

4

1 回答 1

1

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

于 2008-10-29T23:02:31.953 回答