我需要创建一个基于子查询返回结果的LINQ查询。我不太确定我的措辞是否合适,但我知道要问的最佳方式就是展示一个例子。如何将以下TSQL查询转换为LINQ查询(表与对象同名):
SELECT CuisineId, Name
FROM Cuisine
WHERE CuisineId NOT IN (SELECT CuisineId
FROM RestaurantCuisine
WHERE RestaurantId = @id)
您可以猜到,我正在尝试列出一系列“可用”美食,供用户添加到餐厅提供的美食列表中。到目前为止,LINQ我还没有考虑到已经添加到另一个表中的现有CuisineId:
我一直在寻找一个例子,但不太确定如何准确描述我需要的东西。我查看了LINQ查询的MSDN参考,但找不到我需要的东西:
任何人都可以举个例子吗?
答案 0 :(得分:3)
在C#中:
var query =
from c in db.Cuisine
where !(from rc in db.RestaurantCuisine
where rc.RestaurantId == id
select rc.CuisineId)
.Contains(c.CuisineId)
select new {
c.CuisineId,
c.Name
};
在VB.NET中:
Dim availableCuisines = _
From c In db.Cuisines _
Where Not (From rc In db.RestaurantCuisines _
Where rc.RestaurantId = id _
Select rc.CuisineId) _
.Contains(c.CuisineId) _
Select c
答案 1 :(得分:2)
var cuisines = db.Cuisine.Where(c => !RestaurantCuisine.Any(
rc => rc.RestaurantId == c.Id && rc.CuisineId == c.CuisineId);
答案 2 :(得分:1)
尝试:
Cuisine.Where(c => !RestaurantCuisine.Select(rc => rc.CuisineID).Contains(c.CuisineID)).Select(c => c);
答案 3 :(得分:0)
var query = (from c in Cuisine
where !(from rest in RestaurantCuisine
where (rest.RestaurantID == id)).Contains(c.CuisineId)
select new
{
CuisineID = c.CuisineID,
Name = c.Name
});