2011-05-19 36 views
1

//下面提到的類是爲了解問題而創建的,而這是通過Linq2Sql創建的。在Linq中面對問題sql

public class JobAds 
{ 
public int ID { get; set; } 
public int EmployerRef { get; set;} 
} 

int? employerId = null; 

var jobAdListing = JobAds.Where 
    (n => (!employerId.HasValue || n.EmployerRef == employerId.Value)).ToList(); 

問題是我收到「Nullable對象必須有一個值。」在上面的路線。在做了一些調試之後,我覺得n.EmployerRef == employerId.Value正在製造一些麻煩,但是找不到任何好的東西。

回答

1

只要寫鏈接纔可這個,你不必擔心空值(因爲NULL == NULL等於false)

int? employerId = null; 
var jobAdListing = tblCompanies.Where 
    (n => (n.fkUserID_responsible == employerId)).ToList(); 

或者您可以保留您的代碼d只是刪除「.value」

var jobAdListing = JobAds.Where 
    (n => (!employerId.HasValue || n.EmployerRef == employerId)).ToList(); 
+0

不錯的投籃,從我身邊拿一個虛擬的高五。順便說一句,我通過刪除「.value」來使用第二個選項。 – Zohaib 2011-05-19 08:08:21

1

在我的本地操場上simmilar情況下,這種最簡單的方法的工作原理:

using (UnitOfWork.Begin("LinqToSql")) 
{ 
    Guid? id1 = null; 
    Guid? id2 = this.personRepository.GetAll().First().FavouriteProjectId; 

    var all = this.personRepository.GetAll().Where(o => o.FavouriteProjectId == id1 || o.FavouriteProjectId == id2).ToArray(); 
} 

對你來說,這應該工作太:

int? employerId = null; 
int? employerType = null; /* OTHER Conditions */ 

var list = JobAds.Where(n => n.EmployerRef == employerId && 
          n.EmployerTypeRef == employerType)).ToArray(); 
+0

NET employerId是局部變量。但是,我不能在這裏使用IF條件,因爲我有大約6個局部變量類似於employerId,您可以想象我需要多少個IF條件。這就是爲什麼,我使用(!employerId.HasValue || n .EmployerRef == employerId.Value)有點代碼在這裏。 – Zohaib 2011-05-19 07:40:36