gpt4 book ai didi

c# - 创建不具有实体类型属性的动态 LINQ 语句

转载 作者:行者123 更新时间:2023-12-02 08:11:03 25 4
gpt4 key购买 nike

我正在尝试创建一个 Linq 语句,该语句查询实体上作为属性存在的列以及实体数据库中不存在但作为列存在的列。

例如,我有一个 Book 实体的集合。每本书都有一个 ID 和 Title 属性以及数据库中的匹配列。但是,假设 Book 的表还包含 Author 的列字段,而我的 Book 实体没有此字段。

涉及 ID 和标题的普通查询可能如下所示:

Books.Where(b=>b.ID == 123 && b.Title == "Title")

但是,我还想动态地将“AND Author = 'Name' ”的等效内容添加到上述查询中。 Book 对象上不存在 Author 属性。

额外的字段及其应包含的值实际上在字典中可用。因此,我需要向查询动态添加多个 AND [FieldName] = '[Value]' 条件。

这可能有助于解释为什么我需要它来知道我正在使用 Azure 表存储,并且我已经覆盖了将 Book 实体转换为存储在 Azure 中的 XML 的序列化。

编辑 -

我尝试过使用 Dynamic Linq 库,但它不起作用。

Books.Where(b=>b.ID == 123 && b.Title == "Title").Where("Author = @0", "SomeName").ToList();

抛出:System.Linq.Dynamic.ParseException:“Book”类型中不存在属性或字段“Author”。

另外,

我知道使用 Books.AddQueryOption("$filter","Author eq 'SomeName'") 在单独使用时有效。但我不知道如何将 AddQueryOption 与现有的Where语句一起使用。

最佳答案

如果不将作者添加到书中,您要么必须传递另一个带有作者的对象:

var x = new { Author="SomeName" };  
Books.Where(b=>b.Id == 1 && b.Title == "Alpha").Where("@1.Author == @0", "SomeName", x);

或者从 Book 继承并为此目的添加 Author 属性:

public class BookEx : Book {
public string Author { get; set; }
}

Books.Cast<BookEx>().Where(b=>b.Id == 1 && b.Title== "Alpha").Where("Author == @0", "SomeName");

关于c# - 创建不具有实体类型属性的动态 LINQ 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619029/

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