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

标签 c# .net linq linq-to-sql

我有一个使用多个连接运行的 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/

相关文章:

c# - AppDomains 是否在自己的线程中执行?

c# - 在 C# 中序列化对象的一部分

c# - 字典的 IEnumerator 是否保证一致?

.net - 我应该使用 Resharper 来整理其他人的代码吗?

c# - 从列表中选择未出现在第二个列表中的内容

c# - 如何将 Group By SQL 转换为 LINQ?

c# - 在 WPF 中绘制基元非常慢。如何提高?

c# - MS图API : Set custom tags (columns) of a DriveItem

c# - .NET 中是否有只读流的默认实现?

c# - sum 2 数字问题