2012-10-31 96 views
0

我正在实体框架工作,我创建了一个方法返回我的表的列表, 我检索基于grpID的数据(这是外键,所以我可以有多个记录) 我在一个数组保存这些GRPID的,所以我想在实体框架命令来运行,这样我可以得到一个列表记录,我如何申请在指挥,我的代码如下在实体框架中的查询

public List<tblResource> GetResources(long[] grpid) 
     { 
      try 
      {    
       return dataContext.tblResource.Where(c => c.GroupId == grpid && c.IsActive == true).ToList();//This code is not working as i am having array of groupIds 

      } 
      catch (Exception ex) 
      {     
       return ex; 
      } 
     } 

回答

1

您可能使用Contains模仿Select IN查询

dataContext.tblResource.Where(c=> gripid.Contains(c.GroupId) 
            && c.IsActive == true) 
         .ToList(); 

其中grpid是您的ID数组。

你可以考虑下面的例子。假设您的Product类具有两个属性ID和Name,并且ProductList的数组包含这些ID。 Select IN Query应该类似于:

int[] productList = new int[] { 1, 2, 3, 4 }; 
List<Product> products = new List<Product>(); 
products.Add(new Product { ID = 1, Name = "Test" }); 
products.Add(new Product { ID = 2, Name = "Test" }); 
products.Add(new Product { ID = 6, Name = "Test" }); 
var myProducts = from p in products 
       where productList.Contains(p.ID) 
       select p; 
var methodChainingQuery = products.Where(c => productList.Contains(c.ID)); 
+0

感谢答复,但我有多头排列,所以我不能申请包含:( –

+0

你可以申请'Contains'用'long'数据类型:)它不仅仅是字符串。 – Habib

+0

是的,对不起,我没有看到错误味精彻底:) –

0

使用IEnumerable.Contains与组ID数组。

List<tblResource> GetResources(long grpid) 
{ 
    try 
    {    
     return dataContext.tblResource.Where(c => grpIDArray.Contains(c.GroupId) 
     && c.IsActive == true).ToList();  
    } 
    catch (Exception ex) 
    {     
      return ex; 
    } 
} 
+0

谢谢你的回复,但我有很长的阵列,所以我不能申请包含:( –

+0

你尝试过吗?,你也可以申请长期以及。 – Adil

0

......怎么

dataContext.tblResource.Where(c=> gripid.Any(GroupId) 
           && c.IsActive == true).ToList();