我有一个使用多个连接运行的 LINQ 查询,我想将它作为 IQueryable<T>
传递并在其他方法中应用额外的过滤器。
问题是我不知道如何传递 var
数据类型并保持强类型,如果我尝试将其放入我自己的类中(例如:.Select((a,b) => new MyClass(a,b))
),我稍后尝试添加时会出错 Where
子句,因为我的类(class)没有翻译成 SQL。有什么办法可以执行以下操作之一:
- 将我的类映射到 SQL?
- 制作
var
数据类型实现一个接口(interface)(这样我就可以像那样传递它)? - 有什么我没有想到的可以解决我的问题?
例子:
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/