gpt4 book ai didi

c# - LinqToSql 选择一个类然后做更多的查询

转载 作者:行者123 更新时间:2023-11-30 16:34:03 24 4
gpt4 key购买 nike

我有一个使用多个连接运行的 LINQ 查询,我想将它作为 IQueryable<T> 传递并在其他方法中应用额外的过滤器。

问题是我不知道如何传递 var数据类型并保持强类型,如果我尝试将其放入我自己的类中(例如:.Select((a,b) => new MyClass(a,b))),我稍后尝试添加时会出错 Where子句,因为我的类(class)没有翻译成 SQL。有什么办法可以执行以下操作之一:

  1. 将我的类映射到 SQL?
  2. 制作var数据类型实现一个接口(interface)(这样我就可以像那样传递它)?
  3. 有什么我没有想到的可以解决我的问题?

例子:

public void Main()
{
using (DBDataContext context = new DBDataContext())
{
var result = context.TableAs.Join(
context.TableBs,
a => a.BID,
b => b.ID,
(a,b) => new {A = a, B = b}
);
result = addNeedValue(result, 4);
}
}

private ???? addNeedValue(???? result, int value)
{
return result.Where(r => r.A.Value == value);
}

PS:我知道在我的例子中我可以很容易地展开这个函数,但在现实中,如果我尝试的话,它绝对是一团糟。

最佳答案

您所要做的就是取消匿名化您作为查询结果构建的类型 - new { A = a, B = b }只需创建一个具有这些属性的类并适当命名即可。那么您的查询将具有 IQueryable<your type> 类型

像这样:

public class MyClass 
{
public int A { get; set; }
public int B { get; set; }
}

public void Main()
{
using (DBDataContext context = new DBDataContext())
{
var result = context.TableAs.Join(
context.TableBs,
a => a.BID,
b => b.ID,
(a,b) => new MyClass {A = a, B = b}
);
result = addNeedValue(result, 4);
}
}

private IQueryable<MyClass> addNeedValue(IQueryable<MyClass> result, int value)
{
return result.Where(r => r.A.Value == value);
}

关于c# - LinqToSql 选择一个类然后做更多的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2696129/

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