一次搜索多个表(Linq to SQL)?

时间:2010-08-12 18:46:16

标签: linq linq-to-sql

我有几个表格是无关的 - 我喜欢搜索它们并创建一个我可以在以后筛选的类型

这样的事情不起作用

var results = from dog in _dataContext.Dogs  
                      where dog.Name.Contains(search)  

                      from catin _dataContext.Cats  
                      where cat.Name.Contains(search)  

                      select new AnimalSearchResults  
                                  {  
                                      Dog = dog,  
                                      Cat = cat  
                                  };  

        return results;  

我基本上想要创建一个“AnimalSearchResults”列表,其中包含所有狗和所有具有该名称的猫

做这样的事情最好的方法是什么?

2 个答案:

答案 0 :(得分:6)

听起来你想要Union the two results,所以你的基本查询会是这样的:

var results = (from dog in _dataContext.Dogs  
                      where dog.Name.Contains(search))
                      .Union
                      (from cat in _dataContext.Cats  
                      where cat.Name.Contains(search));

答案 1 :(得分:3)

另一种解决方法是让类 Cat 和类 Dog 派生相同的基类,然后输入名称。

这是一个例子


public class Pet
{
    public string Name {get; set;}
}

public class Dog : Pet {...} 
public class Cat : Pet {...}
// I assume each classes have their singularity;

在DataContext对象中,创建一个GetPets()方法,如下所示:


public IEnumerable<Pet> GetPets()
{
    return Cats.Cast().Union( Dogs.Cast() );
}

然后在DataContext中的Pets上使用LINQ。


var results =
    (from p in _dataContext.GetPets()
     where p.Name.Contains(search)
     select p);

此代码可扩展性更高,特别是如果您有超过2个派生类。

{享受}