是否有無論如何我可以創建一個不在子句中就像我將在SQL Server中的Linq to Entities?LINQ to Entities中的「NOT IN」子句
45
A
回答
84
如果您使用內存集合作爲過濾器,最好使用Contains()的否定。請注意,如果列表太長,這可能會失敗,在這種情況下,您需要選擇另一個策略(請參閱下面關於使用針對完全面向數據庫的查詢的策略)。
var exceptionList = new List<string> { "exception1", "exception2" };
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => !exceptionList.Contains(e.Name));
如果你基於使用Except
可能是一個更好的選擇另一個數據庫查詢排除。 (這裏是一個link在LINQ支持集擴展到實體)
var exceptionList = myEntities.MyOtherEntity
.Select(e => e.Name);
var query = myEntities.MyEntity
.Select(e => e.Name)
.Except(exceptionList);
這是假設您在其中不包括根據其它表的某些屬性特定的一些和想要的不是實體的名稱複雜的實體排除。如果你想要整個實體,那麼你需要將異常構造爲實體類的實例,以使它們滿足默認的相等運算符(參見docs)。
14
嘗試:
from p in db.Products
where !theBadCategories.Contains(p.Category)
select p;
什麼是你想翻譯成LINQ查詢的SQL查詢?
4
我參加了一個列表,並使用
!MyList.Contains(table.columb.tostring())
注:請務必使用列表,而不是ILIST
5
我有以下的擴展方法:
public static bool IsIn<T>(this T keyObject, params T[] collection)
{
return collection.Contains(keyObject);
}
public static bool IsIn<T>(this T keyObject, IEnumerable<T> collection)
{
return collection.Contains(keyObject);
}
public static bool IsNotIn<T>(this T keyObject, params T[] collection)
{
return keyObject.IsIn(collection) == false;
}
public static bool IsNotIn<T>(this T keyObject, IEnumerable<T> collection)
{
return keyObject.IsIn(collection) == false;
}
用法:
var inclusionList = new List<string> { "inclusion1", "inclusion2" };
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => e.IsIn(inclusionList));
var exceptionList = new List<string> { "exception1", "exception2" };
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => e.IsNotIn(exceptionList));
非常有用的以及直接傳值:
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => e.IsIn("inclusion1", "inclusion2"));
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => e.IsNotIn("exception1", "exception2"));
0
我創造了它更類似的方式到SQL,我認爲這是比較容易理解
var list = (from a in listA.AsEnumerable()
join b in listB.AsEnumerable() on a.id equals b.id into ab
from c in ab.DefaultIfEmpty()
where c != null
select new { id = c.id, name = c.nome }).ToList();
相關問題
- 1. String.Replace in LINQ to Entities
- 2. 'Random'Orderby in webservice using LINQ To Entities
- 3. LINQ to Entities條件where子句
- 4. Linq To Entities
- 5. LINQ To Entities Multiselect
- 6. LINQ-to-Entities
- 7. LINQ to Entities和子查詢
- 8. .Include().Where()in Linq to Entities查詢
- 9. LINQ to Entities等價於SQL NOT IN
- 10. LINQ to Entities Contains Case In-Sensitive Searching
- 11. 從Linq-to-Entities中選擇Linq-to-XML?
- 12. LINQ to EF - 模擬SQL「IN」子句
- 13. LINQ to Entities中的子查詢
- 14. Linq To Entities
- 15. Linq to entities OrderBy()
- 16. Linq to Entities System.data.Objects
- 17. LINQ to entities exception
- 18. Linq to Entities
- 19. Linq to Entities - GroupBy
- 20. Linq to Entities DefaultIfEmpty
- 21. LINQ To Entities then SQLCompact
- 22. Linq to Entities To Column names
- 23. 添加到LinQ-to-Entities更新的Where子句中
- 24. linq to Entities中where子句的擴展方法
- 25. LINQ to Entities 4:在where子句中計算的查詢
- 26. LINQ to Entities是否支持'where'子句謂詞中的IEquatable?
- 27. Linq to Entities - where語句中的子查詢
- 28. Linq to Entities Select Distinct
- 29. SQL to Linq to Entities轉換
- 30. Linq to Entities .net4 EF
出於某種原因`Except`產生可怕的SQL 。 `Contains`是這裏使用的方法:`myEntities.MyEntity.Select(e => e.Name).Where(x =>!exceptionList.Contains(x))``。 – 2013-08-09 23:28:30
@GertArnold,請您詳細說明「產生可怕的SQL」的說法嗎? 我使用Except,它工作得很好。 沒有古怪,也沒有表現怪癖,AFAIK。 – NinjaCross 2014-10-06 16:00:13