리터럴 값을 쿼리에 추가해야합니다. 내 시도Linq Union : 리터럴 값을 쿼리에 추가하는 방법?
위의 예에서var aa = new List<long>();
aa.Add(0);
var a = Products.Select(p => p.sku).Distinct().Union(aa);
a.ToList().Dump(); // LinqPad's way of showing the values
, 나는 오류가 발생 : 내가 엔티티 프레임 워크 4를 사용하고있는 경우
"Local sequence cannot be used in LINQ to SQL implementation
of query operators except the Contains() operator."
예를 들어, 나는 연방 문에 무엇을 추가 할 수 있습니다에 항상 포함 " 시드 "신분증?
나는 다음과 같은 SQL 코드를 생성하려고 : 그래서 다음으로 가장 높은 값이 존재하지 않는 모든 값을 찾을 수 있습니다 나중에 내가 자체에 대한 목록을 join
수
select distinct ID
from product
union
select 0 as ID
(가장 낮은 발견 세트에서 사용 가능한 ID).
편집 : 원래 Linq는 쿼리는 다음으로 가장 높은이 존재하지 않는 경우 다음 SKU를 선택하고,이 코드는 두 개의 SKU 하나에 의해 상쇄 세트 생성 가능한 가장 낮은 ID
var skuQuery = Context.Products
.Where(p => p.sku > skuSeedStart &&
p.sku < skuSeedEnd)
.Select(p => p.sku).Distinct();
var lowestSkuAvailableList =
(from p1 in skuQuery
from p2 in skuQuery.Where(a => a == p1 + 1).DefaultIfEmpty()
where p2 == 0 // zero is default for long where it would be null
select p1).ToList();
var Answer = (lowestSkuAvailableList.Count == 0
? skuSeedStart :
lowestSkuAvailableList.Min()) + 1;
을 찾을 수 있습니다. 그 다음에 최소값 (가장 높은 SKU가 다음으로 높은 값을 사용할 수있는 값)을 선택합니다.
이 작업을하려면 시드가 함께 결합 된 세트에 있어야합니다.
코드는 궁극적으로 "씨"못지 않게 사용할 수있는 가장 낮은 ID를 가져옵니다. 현재, 기존 ID에서 시작하여 가장 낮은 ID를 얻습니다. 따라서 "0"이 쿼리의 일부가되어야하는 이유는 무엇입니까? SQL에서는 '제품 조합에서 고유 ID를 선택하십시오. 0으로 ID 선택'을 수행합니다 (별개의 값을 선택하도록 명확하게 추가했습니다) –
@Dr. Zim : LINQ-to-SQL 쿼리에 실제 리터럴 값을 도입 할 수 있다고 생각하지 않습니다.검색어를 더 큰 맥락으로 게시 할 수 있다면 고양이를 다듬는 다른 방법을 찾을 수는 있지만 일반적으로 불가능합니다. –
원본 Linq 쿼리 추가 : –