0

私はlinq to sqlを使用しています。

私はこのようにすることができますか?

var lst = (somecondition) ? _db.Employees
                               .Where(a => a.EmployeeID.Equals(employeeId)) 
                          : _db.Departments
                               .Where(a => a.deptsID.Equals(deptId));

私がこれをやろうとすると、このようなエラーがスローされます

System.Linq.IQueryable<Employee>と の間に 暗黙的な変換がないため、条件式の型を判別できません。System.Linq.IQueryable<Department>

誰でも私に提案をしてもらえますか。

4

5 に答える 5

0

この部分を次のように変更します。

object lst = (somecondition) ? (object)_db.Employees.**AsEnumerable()**
                           .Where(a => a.EmployeeID.Equals(employeeId)) 
                      : _db.Departments.**AsEnumerable()**
                           .Where(a => a.deptsID.Equals(deptId));

これが「IEnumerable」に変わることに注意してください。LINQ-TO-OBJECT—<strong>すべての LINQ を標準 SQL に変換できるわけではないためです。

于 2013-10-29T06:56:37.360 に答える
0

これは役に立ちませんが、次のことができます。

object lst = (somecondition) ? (object)_db.Employees
                           .Where(a => a.EmployeeID.Equals(employeeId)) 
                      : _db.Departments
                           .Where(a => a.deptsID.Equals(deptId));

どちらのリストも自分自身をオブジェクトにキャストします。その変数では何もできませんが、機能します。

于 2013-10-29T06:45:08.757 に答える
0

2 つの異なる型を 1 つの変数に設定するには、ポリモーフィズムを使用する必要があります (ウィキペディアで読むことができます)。

考えてみると、変数を割り当てた後、それで何をしますか?

Employeehas methodと仮定して、 has methodとFooします。DepartmentBar

クエリから返されたオブジェクトをどうしますか?

電話してみますinstance.Foo()か?しかし、それがDepartment?
ではどうinstance.Bar()ですか?しかし、それがEmployee?

両方のクラスに存在することをユーザー (およびコンパイラー) が知っているメソッドを呼び出す必要があります。
ここでポリモーフィズムが始まります。
両方を同じ方法で参照できる必要があります。つまり、共通の基本クラスまたは両方が実装するインターフェースによって参照できる必要があります。

もちろん、.Net ではすべてのオブジェクトがobjectクラスから派生するため、いつでもそれらをオブジェクト リストに入力して結果を確認できます。しかし、これは非常にエレガントなソリューションではありません。

于 2013-10-29T06:58:00.207 に答える